函数默认参数问题

def addlist(a,lista= []):
    print id(lista)
    lista.append(a)
    return lista
a = addlist('a')
print addlist.func_defaults
print a
b = addlist('b')
print addlist.func_defaults
print addlist.func_defaults
print a
print b

当解释器执行 def 的时候,默认参数也会被计算,并存在函数的 fun_defaults 属性中。由于python 中传递的函数是对象,而且可变对象在调用者和被调用者之间共享,因此当首次计算 addlist('a')的时候,[]的到 'a' 并存在了函数的 func_defaults中,当第二次调用addlist('b') 时, 默认参数并不会重新计算,于是在['a']的基础上成了['a','b'] 。所以多次调用 addlist 函数会导致 addlist.func_defaults 属性值不断增加。从而影响函数的准确性。

正确的写法:

def addlist(a,lista=None):
    if lista is None:
        lista = []
    lista.append(a)
    return lista
原文地址:https://www.cnblogs.com/jijizhazha/p/7122955.html