考虑以下情况:
情况1:
def fun(arg):
arg += 1
my_var = 1
fun(my_var)
print(my_var)
>> 1
情况2:
def fun(arg):
arg += [4]
my_var = [1,2,3]
fun(my_var)
print(my_var)
>> [1, 2, 3, 4]
情况3:
def fun(arg):
arg = arg + [4]
my_var = [1,2,3]
fun(my_var)
print(my_var)
>> [1, 2, 3]
情况4:
def fun(arg):
print(arg)
fun("Hi")
print(arg)
>> Hi
Traceback (most recent call last):
File "<string>", line 8, in <module>
NameError: name 'arg' is not defined
情况4证明参数变量的范围位于函数内。情况1和3支持由于函数内arg变量的更改不会在全局参数中反映出来。
但是为什么案例2完全发生呢?当我使用append而不是+ =时,我注意到了同一件事。arg发生的更改不应该对从其他作用域调用该函数的变量没有任何影响吗?
任何帮助表示赞赏。提前致谢。
情况2是唯一在实例上使用变异方法的情况。这会影响传递的参数。
其他人什么也不做,或者只是重新分配论点。python中的赋值仅影响要分配的变量,而不会影响仍引用先前实例的其他变量。
强制链接到Ned Batchelder
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句