【python】关键字global
关键字global
Python 中的全局变量默认是可以在所有的函数内访问的,但是,如果在函数中定义了与全局变量同名的变量时,就会发生局部变量隐藏了全局变量的情形。如果局部变量隐藏了全局变量,那么当我们再次访问全局变量时,程序会报错,会说找不到该变量,因为,该全局变量被局部变量隐藏了。当局部变量与全局变量重名时,我们可以在函数内部使用 global 关键字来说明,我们在函数内部使用的是全局变量,而不是再次定义一个局部变量。
1.局部变量和全局变量重名:定义了一个全局变量 site,接着,我们定义了一个函数 func,同时,在函数 func 里面,我们首先打印变量 site 的值,接着再次给变量 site 赋值。最后,调用函数 func,此时程序报错,理论上我们在 func 函数里面第一次打印使用的应该是全局变量 site,但实际上程序却把 func 函数的第一次打印使用的变量定义为了局部变量。
site = "HaiCoder"
def func():
print("In Func Site =", site)
site = "haicoder"
func()
print("Global Site =", site)
输出:
Traceback (most recent call last):
File "demo01.py", line 8, in <module>
func()
File "demo01.py", line 5, in func
print("In Func Site =", site)
UnboundLocalError: local variable 'site' referenced before assignment
2. 局部变量和全局变量重名
site = "HaiCoder"
def func():
global site
print("In Func Site =", site)
site = "haicoder"
func()
print("Global Site =", site)
输出:
In Func Site = HaiCoder
Global Site = haicoder
3. 例子
x = 5
def func_a():
print(x)
def func_b():
print(x)
def func_c():
print(x)
func_a()
func_b()
func_c()
输出:
5
5
5
4 .例子
x = 5
def func_a():
print(x)
def func_b():
print(x)
def func_c():
x = x + 1
print(x)
func_a()
func_b()
func_c()
输出:
5
5
Traceback (most recent call last):
File "demo01.py", line 14, in <module>
func_c()
File "demo01.py", line 9, in func_c
x = x + 1
UnboundLocalError: local variable 'x' referenced before assignment
5. 例子
x = 5
def func_a():
print(x)
def func_b():
print(x)
def func_c():
global x
x = x + 1
print(x)
func_a()
func_b()
func_c()
输出:
5
5
6