叽叽喳喳,嘻嘻哈哈

导航

函数默认参数问题

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

posted on 2017-07-05 18:42  叽叽喳喳,嘻嘻哈哈  阅读(210)  评论(0编辑  收藏  举报