示例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一样,但是IS能够在函数内使用和操作。此外,在函数定义结束时和函数定义之外打印x
会产生相同的结果。
这两个例子之间有什么区别?
答案 0 :(得分:0)
作业是关键。在第二种情况下,现有变量是变异的,但不是分配。
您可以读取和修改现有的全局变量,但是如果没有全局语句,则无法将新对象分配给变量。