显式使用函数的默认参数

问题描述 投票:0回答:2

在正常情况下,人们可以通过省略这些参数来调用带有默认参数的函数。然而,如果我要即时生成参数,那么省略一个参数并不总是那么容易或优雅。有没有办法显式使用函数的默认参数?也就是说,传递一个指向默认参数的参数。

所以类似这样的东西,除了用智能的东西代替

~use default~

def function(arg='default'):
    print(arg)

arg_list = ['not_default', ~use default~]

for arg in arg_list:
    function(arg=arg)

# output:
# not_default
# default

我不知道这是否可能,并且考虑到术语“默认参数”,我所有的搜索结果都是编码员的第一个教程。如果不支持此功能也没关系,我只是想知道。

python default-arguments
2个回答
2
投票

不幸的是Python中没有这样的功能。有一些破解方法,但它们不是很受欢迎。

简单而流行的模式是将默认值移至函数体中:

def function(arg=None):
    if arg is None:
        arg = 'default'
    ...

现在您可以省略参数或显式传递

arg=None
以采用默认值。


2
投票

没有通用的方法来省略参数;您可以通过显式传递适当的默认值来专门处理特定的函数,但否则,您唯一的选择就是不传递参数。

最接近的方法是将您的个人值替换为省略相关参数的

tuple
dict
,然后在调用时解压它们。因此,对于您的示例,您可以将
arglist
的定义更改为:

arg_list = [{'arg': 'not_default'}, {}]

然后像这样使用它:

for arg in arg_list:
    function(**arg)

一个稍微丑陋的方法是当你不想传递参数时使用哨兵,在你的

arg_list
中使用它,并测试它,例如:

USEDEFAULT = object()
arg_list = ['not_default', USEDEFAULT]

for arg in arg_list:
    if arg is USEDEFAULT:
        function()
    else:
        function(arg=arg)

显然有点不太干净,但可能更适合特定的用例。

© www.soinside.com 2019 - 2024. All rights reserved.