python global用法和nonlocal关键字
global 和 nonlocal关键字
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。
局部作用域内变量想修改闭包函数外的变量用:nonlocal
闭包函数外的函数想修改全局作用域的变量用:global
以下实例修改全局变量 num:
实例(Python 3.0+)
#!/usr/bin/python3
num = 1
def fun1():
global num # 需要使用 global 关键字声明
print(num)
num = 123
print(num)
fun1()
print(num)
以上实例输出结果:
1
123
123
如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:
实例(Python 3.0+)
\#!/usr/bin/python3
def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num)
outer()
Test:
(1)测试global能否修改闭包函数外的变量:否(global直接作用于全局)
(2)测试nonlocal能否修改多层闭包函数外的变量:能(nonlocal作用于闭包函数内第一个相同变量名的变量,除全局变量)
(3)测试nonlocal能否修改全局作用域的变量:否(直接报错)
总结:修改全局变量用:global
修改闭包函数外变量用:nonlocal
参考:
https://www.runoob.com/python3/python3-namespace-scope.html