正确的方法是将默认空列表/字典/集合/等指定为函数arg

时间:2013-06-24 19:06:12

标签: python

为函数指定空字典或列表的正确方法是什么?

def func_a(l=list(), d=dict()):
    pass

def func_b(l=[], d={}):
    pass

2 个答案:

答案 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