首页 文章

在Python中使用可变类型作为默认参数有什么含义? [重复]

提问于
浏览
-2

可能的重复:为什么“可变的默认参数修复”语法是如此丑陋,在python中询问python newbie最少的惊讶:可变的默认参数

这是一个例子 .

def list_as_default(arg = []):
    pass

1 回答

  • 2

    来自:http://www.network-theory.co.uk/docs/pytut/DefaultArgumentValues.html

    默认值仅计算一次 . 当默认值是可变对象(例如列表,字典或大多数类的实例)时,这会产生差异 . 例如,以下函数会累积在后续调用中传递给它的参数:

    def f(a, L=[]):
        L.append(a)
        return L
    
    print f(1)
    print f(2)
    print f(3)
    

    这将打印出来

    [1]
    [1, 2]
    [1, 2, 3]
    

    如果您不希望在后续调用之间共享默认值,则可以编写如下函数:

    def f(a, L=None):
        if L is None:
            L = []
        L.append(a)
        return L
    

相关问题