Python 是否支持默认关键字和默认可变长度参数?
Does Python support Default Keyword and Default Variable Length Arguments?
我知道 Python 支持可变参数 *args
和关键字参数 **kwargs
但有没有办法为这些字段设置默认值?如果不是,为什么?
*args = (1,'v')) , **kwargs = {'a':20}
我并不是说我有这方面的用例,但似乎也没有理由禁止这样做。我知道通过检查空 args
.
来解决这个问题是微不足道的
您可以使用默认 kwargs
并仍然使用 splat
解压 **kwargs
def john(name, dog, *args, bob="bob", **kwargs):
print(name, dog, bob)
# "ream" is an unpacked arg
john("john", 1, "ream") # john 1 bob
# jane is an unpacked kwarg
john("john", 1, "ream", jane="jane") # john 1 bob
john("john", 1, "ream", bob="jane") # john 1 jane
为 *arg
设置默认值非常困难,因为我们的想法是让函数需要该输入。您可以按照这种方式查看一些技巧,例如 range
内置函数的实现。不过我会把它设为 kwarg
。
不,*args
和 **kwargs
是包罗万象的参数,它们接收没有显式参数的任何参数。指定默认值违背了它们的目的。相反,您的示例默认值可以使用 existing 语法处理,无需在此处使函数定义语法复杂化。
您可以通过指定 普通关键字参数:
来覆盖默认值
def foo(pos0, pos1='v', a=20, *args, **kwargs):
pass
我用另一个关键字参数替换了你的 (1, 'v')
'default',因为你可以使用 positional 参数为关键字参数提供值; foo(42, 'spam')
会将 pos1
设置为 'spam'
。
此外,您始终可以在您定义的函数内部进行进一步处理; args
值是一个元组,只需测试长度以检查是否需要对缺失值使用默认值。 kwargs
是一个字典,只需使用 kwargs.get(key, default)
或 kwargs.pop(key, default)
或 if key not in kwargs:
或任何其他 dict
方法来处理丢失的键。
我知道 Python 支持可变参数 *args
和关键字参数 **kwargs
但有没有办法为这些字段设置默认值?如果不是,为什么?
*args = (1,'v')) , **kwargs = {'a':20}
我并不是说我有这方面的用例,但似乎也没有理由禁止这样做。我知道通过检查空 args
.
您可以使用默认 kwargs
并仍然使用 splat
解压 **kwargs
def john(name, dog, *args, bob="bob", **kwargs):
print(name, dog, bob)
# "ream" is an unpacked arg
john("john", 1, "ream") # john 1 bob
# jane is an unpacked kwarg
john("john", 1, "ream", jane="jane") # john 1 bob
john("john", 1, "ream", bob="jane") # john 1 jane
为 *arg
设置默认值非常困难,因为我们的想法是让函数需要该输入。您可以按照这种方式查看一些技巧,例如 range
内置函数的实现。不过我会把它设为 kwarg
。
不,*args
和 **kwargs
是包罗万象的参数,它们接收没有显式参数的任何参数。指定默认值违背了它们的目的。相反,您的示例默认值可以使用 existing 语法处理,无需在此处使函数定义语法复杂化。
您可以通过指定 普通关键字参数:
来覆盖默认值def foo(pos0, pos1='v', a=20, *args, **kwargs):
pass
我用另一个关键字参数替换了你的 (1, 'v')
'default',因为你可以使用 positional 参数为关键字参数提供值; foo(42, 'spam')
会将 pos1
设置为 'spam'
。
此外,您始终可以在您定义的函数内部进行进一步处理; args
值是一个元组,只需测试长度以检查是否需要对缺失值使用默认值。 kwargs
是一个字典,只需使用 kwargs.get(key, default)
或 kwargs.pop(key, default)
或 if key not in kwargs:
或任何其他 dict
方法来处理丢失的键。