位置函数之坑

来源:互联网 发布:怎么登录淘宝网电脑版 编辑:程序博客网 时间:2024/06/05 09:49

当定义一个位置函数,传入一个list,添加一个END在返回:

def add_end(L=[]):    L.append('END')    return L

正常调用时:(没有出错)

>>>add_end([1,2,3])[1,2,3,'END']>>>add_end(['a','b','c'])['a','b','c','END']

但是当你使用默认参数调用时:(结果不是你想要)

>>>add_end()['END']>>>add_end()['END','END']........

这是因为:
python在定义函数时候,默认的参数L的值已经被计算出来,即[],因为默认参数L也是一个变量,他指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,参数的内容就变了,再是定义时的[].
修改为以下形式:

def add_end(L=None):    if L is None:        L=[]     L.append('END')     return L

无论调用多少次都没有问题。
总结:默认参数必须指向不变对象!

0 0
原创粉丝点击