python global 和 nonlocal关键字
global 是把某个变量变成全局变量
场景1:当函数里面想改变一个不可变的数据类型
num = 1 def func(): print(num) func()
=>输出为 1
但是当我们想在函数内改变这个num时,会报错。
num = 1 def func(): num += 1 print(num) func()
=>UnboundLocalError: local variable 'num' referenced before assignment
此时我们就可以用global num来声明全局变量
num = 1 def func(): global num num += 1 print(num) func()
=> 输出为2
场景2:在函数外想使用函数内的变量
def func(): num = 1
func()
print(num)
=> NameError: name 'num' is not defined
此时也可以使用global
def func(): global num num = 1 func() print(num)
=> 输出为1
nonlocal 内函数中使用外函数的变量
def outer(): num = 2 def inner(): print(num) return inner() outer()
=> 输出为2
同样如果你想改变这个num,对不起,不行。此时就可以用nonlocal
def outer(): num = 2 def inner(): nonlocal num num += 1 print(num) return inner() outer()
=> 输出为3
可以理解为如果内函数想改变外函数的变量的值,那么就使用nonlocal关键字