关于 Python 中的 global/nonlocal 关键字
1. Python 变量作用域
Python 的变量作用域可以分下面四种:
- Local:局部作用域
- Enclosing:闭包函数外的函数作用域
- Global:全局作用域
- Built-in:内建作用域
查找变量会逐级别查找(L、E、G、B)。这里值得注意的是,Python 不具备块级作用域,而是一种类似于函数作用域的形式。
2. Python 变量的定义
Python 无需声明便直接定义变量,但是如下例:
a = 1
b = 99
def print_two(x, y):
print(x)
print(y)
def function_test():
a = 2
print_two(a, b)
function_test()
print_two(a, b)
运行时输出为:
2
99
1
99
可知,在内部作用域中,可以直接引用全局作用域中变量的值,但是无法直接进行赋值修改操作。
3. global 关键字
如例子所示:
a = 1
b = 99
def print_two(x, y):
print(x)
print(y)
def function_test():
global a
a = 2
print_two(a, b)
function_test()
print_two(a, b)
运行结果:
2
99
2
99
global 关键字的作用是,在局部作用域中,使用全局变量。若不涉及全局变量的修改(只是单纯引用),也可以不使用 global 关键字。
4. nonlocal 关键字
示例代码:
a = 1
def test():
a = 2
def test1():
a = 3
def test2():
nonlocal a
a = 4
print(a)
test2()
print(a)
test1()
print(a)
test()
print(a)
运行结果:
4
4
2
1
即 nonlocal 关键字,用来在局部作用域中使用外层(非全局)变量。
5. 关于全局变量
在 Python 中,另一种使用全局变量的方式,就是使用单独的 global.py
文件,存储所有的全局变量,可以进行引用和修改。