a = 1
def b():
a = 2
print(a)
b()
运行结果:
2
不报错
而
a = 1
def b():
a = a + 2
print(a)
b()
运行结果:
Traceback (most recent call last):
File "C:\Users\15345\Desktop\cs.py", line 9, in <module>
b()
File "C:\Users\15345\Desktop\cs.py", line 4, in b
a = a + 2
UnboundLocalError: local variable 'a' referenced before assignment
会发生报错,这是为什么呢?
我们先看内存地址是不是同一个:
a = 1
def b():
a = 2
print(a)
print(id(a))
b()
print(id(a))
运行结果:
2
140715928944944
140715928944912
我们会发现两处内存地址不相同,说明函数里的a只是“新建”了一个a变量,而不是原来的变量,所以如果我们直接a = a+1,会发生报错,其原因是因为,系统认为a是局部变量,而在函数内,并没有说明该变量的存在,所以会发生报错
a += 1
运行:
Traceback (most recent call last):
File "C:\Users\15345\Desktop\cs.py", line 1, in <module>
a += 1
NameError: name 'a' is not defined
跟这里的报错差不多一样,本质上就是函数内寻找不到a这个变量
所以修改为:
a = 1
def b():
global a
a = a + 2
print(a)
print(id(a))
b()
print(id(a))
运行结果
3
140715928944976
140715928944976
global声明此变量是全局变量即可