count = 1
def cc():
count = count+1
cc()
Traceback (most recent call last):
File "" , line 1, in
cc()
File "" , line 2, in cc
count = count+1
UnboundLocalError: local variable 'count' referenced before assignment
意思是说count为局部变量,在使用它之前没有被赋值。在函数内无法直接使用全局变量。
num = 1
id(num)
Out[31]: 1886744032
def cc():
num = 2
print(id(num))
print(num)
cc()
1886744064
2
可以看出函数里面的num是局部变量,有什么办法能在函数内使用全局变量呢?根据官方文档,可以用global语句:
The global statement is a declaration which holds for the entire current code block. It means that the
listed identifiers are to be interpreted as globals. It would be impossible to assign to a global variable without global.
意思是说global语句可以声明一个或多个变量为全局变量。该声明仅在当前代码块中有效。除此之外,没办法访问全局变量。所以在函数中添加global声明:
def cc():
global count
count = count+1
print(count)
cc()
2
num = 0
def cc():
global count,num
count = count+1
num = num+2
print(count,num)
cc()
3 2
# 可以函数中的global声明能够修改全局变量
num
Out[24]: 2
#
count
Out[25]: 3
class C:
count = 3
def cc():
count = C.count+1
print(count)
cc()
4
总结:如果是想在函数中调用全局变量,这需要global声明。之后调用全局变量,全局变量的值也随之可能发生改变,如果是count = count+1这种再定义的时候,否则全局变量只是被调用。也可以通过class来调用变量的方法达到全局变量的效果。