这可能是一个简单的问题:
两者之间是否有任何区别:
def myfunc(a_list = [], **kwargs):
my_arg = kwargs.get('my_arg', None)
pass
和
def myfucn(a_list = [], my_arg = None):
pass
如果不是,哪个会被认为更加pythonic?
谢谢, -Matt
答案 0 :(得分:7)
对于一个简单的函数,显式定义你的参数更加Pythonic。除非您有合法的要求接受任意数量的未知或变量参数,否则**kwargs
方法会增加不必要的复杂性。
奖励:永远不要在函数定义中初始化列表!由于列表是可变的,因此可能会导致意外结果!
答案 1 :(得分:1)
第一个可以提供提供的任何关键字参数(无论它只使用其中一个),而第二个只能使用两个。也不是Pythonic,你只需使用适合该任务的那个。
此外,第二个不是“关键字参数”,而是“默认值”。
答案 2 :(得分:1)
第二种选择允许my_arg作为位置而不是关键字参数传递。当你实际上没有将它们用于任何事情时,我会认为声明**kwargs
是unpythonic。