南通网站建设论坛,手机怎么制作网站教程,海口模板网站建站,注册google账号定义默认参数要牢记一点#xff1a;默认参数必须指向不变对象#xff01;
默认参数很有用#xff0c;但使用不当#xff0c;也会掉坑里。默认参数有个最大的坑#xff0c;演示如下#xff1a;
先定义一个函数#xff0c;传入一个list#xff0c;添加一个END再返回默认参数必须指向不变对象
默认参数很有用但使用不当也会掉坑里。默认参数有个最大的坑演示如下
先定义一个函数传入一个list添加一个END再返回
def add_end(L[]):L.append(END)return L
当你正常调用时结果似乎不错 add_end([1, 2, 3])
[1, 2, 3, END]add_end([x, y, z])
[x, y, z, END]
当你使用默认参数调用时一开始结果也是对的 add_end()
[END]
但是再次调用add_end()时结果就不对了 add_end()
[END, END]add_end()
[END, END, END]
很多初学者很疑惑默认参数是[]但是函数似乎每次都“记住了”上次添加了’END’后的list。
原因解释如下
Python函数在定义的时候默认参数L的值就被计算出来了即[]因为默认参数L也是一个变量它指向对象[]每次调用该函数如果改变了L的内容则下次调用时默认参数的内容就变了不再是函数定义时的[]了。