在正常情况下,人们可以通过省略这些参数来调用带有默认参数的函数。然而,如果我要即时生成参数,那么省略一个参数并不总是那么容易或优雅。有没有办法显式使用函数的默认参数?也就是说,传递一个指向默认参数的参数。
所以类似这样的东西,除了用智能的东西代替
~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中没有这样的功能。有一些破解方法,但它们不是很受欢迎。
简单而流行的模式是将默认值移至函数体中:
def function(arg=None):
if arg is None:
arg = 'default'
...
现在您可以省略参数或显式传递
arg=None
以采用默认值。
没有通用的方法来省略参数;您可以通过显式传递适当的默认值来专门处理特定的函数,但否则,您唯一的选择就是不传递参数。
最接近的方法是将您的个人值替换为省略相关参数的
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)
显然有点不太干净,但可能更适合特定的用例。