Python 是否支持默认关键字和默认可变长度参数?

我知道 Python 支持可变参数*args和关键字参数,**kwargs但是有没有办法为这些字段设置默认值?如果不是,为什么?

*args = (1,'v')) , **kwargs = {'a':20}

我并不是说我有一个用例,但似乎也没有理由禁止这样做。我确实理解通过检查 empty 来解决这个问题是微不足道的args


慕田峪9158850
浏览 153回答 2
2回答

PIPIONE

不,*args并且**kwargs是接收任何没有显式参数的参数的全部参数。指定默认值违背了它们的目的。相反,您的示例默认值可以使用现有语法处理,无需在此处使函数定义语法复杂化。您可以通过指定普通关键字参数来覆盖默认值:def foo(pos0, pos1='v', a=20, *args, **kwargs):     pass我(1, 'v')用另一个关键字参数替换了您的“默认”,因为您可以使用位置参数为关键字参数提供值;foo(42, 'spam')将设置pos1为'spam'.此外,您始终可以在您定义的函数内部进行进一步处理;该args值是一个元组,只需测试长度以检查是否需要对缺失值使用默认值。kwargs是字典,只需使用kwargs.get(key, default)或kwargs.pop(key, default)或if key not in kwargs:或任何其他dict方法来处理丢失的键。

红糖糍粑

您可以使用默认值kwargs并仍然使用splatla解压缩**kwargsdef john(name, dog, *args, bob="bob", **kwargs):  print(name, dog, bob)# "ream" is an unpacked argjohn("john", 1, "ream") # john 1 bob# jane is an unpacked kwargjohn("john", 1, "ream", jane="jane") # john 1 bobjohn("john", 1, "ream", bob="jane") # john 1 jane为 an 设置默认值*arg非常困难,因为其想法是使函数需要该输入。您可以在这种情况下查看一些技巧,例如range内置函数的实现。我只是让它成为一个kwarg虽然。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python