为函数指定空字典或列表的正确方法是什么?
def func_a(l=list(), d=dict()):
pass
def func_b(l=[], d={}):
pass
答案 0 :(得分:7)
如果您不打算改变输入参数,那么其中任何一个都很好......
但是,如果你打算改变列表或函数内的字典,你不想使用你提供的任何一种形式...你想做更像这样的事情:< / p>
def func(l=None, d=None):
if l is None:
l = list() #or l = []
if d is None:
d = dict() #or d = {}
请注意,[]
和{}
会导致执行速度稍快。如果这是一个非常紧凑的循环,我会使用它。
答案 1 :(得分:3)
都不是。 Python中的默认参数在函数定义中计算一次。正确的方法是使用None
并在函数中检查它:
def func(l=None):
if l is None:
l = []
...
参见讨论in this SO question。