我正在阅读 Python 文档版本 2.7.10 中的 python 教程,我遇到了类似的内容。
Code
def fun1(a,L=[]):
L.append(a)
return L
print fun1(1)
print fun1(2)
print fun1(3)
def fun2(a,L = None):
if L is None:
L=[]
L.append(a)
return L
print fun2(1)
print fun2(2)
print fun2(3)
Output
[1]
[1, 2]
[1, 2, 3]
[1]
[2]
[3]
Process finished with exit code 0
If the L=[]
在第一个函数中fun1()
仅被调用一次,输出fun1()
很好。但那为什么L=None
每次都接到电话fun2()
.
L=[]
在函数声明中,Python 本质上是这样做的:
- 该函数有一个名为
L
- 它的默认参数是
[]
,让我们设置这个特定的[]
放在一边并在没有传递参数的任何时候使用它L
- 每次调用函数时,创建一个变量
L
,并将其分配给传递的参数或我们之前预留的值
So, the []
部分执行一次,这会创建一个列表对象,该对象被搁置并保留,这就是为什么如果您修改它,它会累积更改的原因。完全相同的事情发生在None
, 然而None
没有被修改,也不是可变的,所以你不会看到任何奇怪的副作用。None
仍然只被“执行”一次,并且那个特定的None
值就像列表一样被搁置,只是你没有对它做任何事情None
价值本身。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)