python 函数默认值参数如果为“可变值” 的话,结果可能会出乎意外。

比如:

def add_end(L=[]):
    L.append('END')
    return L
执行add_end() 默认参数的时候 
>>> add_end()
['END', 'END']
>>> add_end()
['END', 'END', 'END']
默认参数是[],但是函数似乎每次都“记住了”上次添加了'END'后的list。其实
Python 函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。所以,定义默认参数要牢记一点:默认参数必须指向不变对象!
请先 登录 后评论
  • 0 关注
  • 0 收藏,615 浏览
  • 石天 提出于 2016-11-23 22:43

相似问题