2

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

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

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

2 回答 2

7

如果您不打算改变输入参数,那么其中任何一个都很好......

但是,如果您打算改变函数内的列表或字典,您不想使用您提供的任何一种形式......您想做更多这样的事情:

def func(l=None, d=None):
    if l is None:
       l = list()  #or l = []
    if d is None:
       d = dict()  #or d = {}

请注意,[]and{}将导致执行速度稍快。如果这是一个非常紧密的循环,我会使用它。

于 2013-06-24T19:07:57.697 回答
3

两者都不。Python 中的默认参数在函数定义时计算一次。正确的方法是None在函数中使用并检查它:

def func(l=None):
    if l is None:
        l = []
    ...

请参阅此 SO question 中的讨论。

于 2013-06-24T19:09:41.500 回答