Python: 显式使用默认参数

Python: explicitly use default arguments

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

所以类似这样的东西,除了 ~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

我不知道这是否可能,考虑到术语 "default argument" 我所有的搜索都是编码员第一教程。如果不支持这个功能也没关系,我只是想知道。

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

最接近的方法是用省略相关参数的 tuples 或 dicts 替换您的个人值,然后在调用时解压缩它们。因此,对于您的示例,您将 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)

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

遗憾的是Python中没有这样的功能。有 hackarounds,但它们不是很讨人喜欢。

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

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

现在您可以省略参数或显式传递 arg=None 以采用默认值。