示例 1:
x = 5
def dE():
x = 6 + x
print(x)
dE()
print(x)
其中输出:
UnboundLocalError: local variable 'x' referenced before assignment
示例 2:
x = [1,8,2,1,6,3,7,6,4,12,13]
def dE():
i = len(x) - 1
while (i >= 0):
currVal = x[i]
if (currVal % 2 == 0):
del(x[i])
i = i - 1
print(x)
dE()
print(x)
其中输出:
[1, 1, 3, 7, 13]
[1, 1, 3, 7, 13]
在 Python 中定义函数时,我的理解是,函数(局部)内发生的变量赋值不会影响(或创建)函数(全局)外部的变量,反之亦然,除非它们在函数中被显式调用为global
。
这可以在示例 1 中看到,其中函数尝试将6 + x
分配给x
但不能,因为x
以前未在函数中定义,并且从未声明为global
。
但是,在示例 2 中,将列表分配给函数外部/之前x
。然后,在函数中,x
既没有声明global
也没有定义,就像示例 1 一样,但可以在函数中使用和操作。此外,在函数定义的末尾和调用函数后的函数定义外部打印x
会给出相同的结果。
这两个例子有什么区别?
赋值是关键。在第二种情况下,现有变量发生突变,但未赋值。
您可以读取和修改现有的全局变量,但不能在没有全局语句的情况下将新对象分配给变量。