我有一个关于python函数范围的问题。我已经包含了一个演示我遇到的问题的示例。Python函数范围
fun0重新定义了变量c的列表中的第一个条目。这种变化反映在fun0之外,即使我没有从fun0返回任何值。
FUN1重新定义了可变Ç完全,但是变化并不的FUN1外侧反射。同样,fun2重新定义了c,并且该更改未反映在之外fun2。
我的问题是,为什么fun0修改在主要功能VAL3,而FUN1和FUN2不修改分别VAL4和val7,?
def fun0(a, b, c):
c[0] = a[0] + b[0]
return
def fun1(a, b, c):
c = a[0] + b[0]
return
def fun2(a, b, c):
c = a + b
return
def main():
val1 = ['one']
val2 = ['two']
val3 = ['']
fun0(val1, val2, val3)
print val3
val4 = []
fun1(val1, val2, val4)
print val4
val5 = 1
val6 = 1
val7 = 0
fun2(val5, val6, val7)
print val7
return
if __name__=='__main__':
main()
列表是可变的,你可以修改它们的元素,它会影响每个人的参考。当你重新分配它时,你正在创建一个新的参考。 – byxor
这很奇怪,我把其他代码片段称为“所有人”。也许人性化的代码是我更好地理解它的方式。 – byxor