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