Example
def f():
global g1
g1 = 2
print(f'g1:{g1}')
def g():
# g1 += 1
# g1 = 1
print(g1)
Summarize
- 在函数体内,可以直接定义一个global变量,而无需提前在外部定义好
- global变量,可以在没有global声明的函数体内被调用,但无法被修改
- 即上面未声明global g1的g()中,无法执行 g1 = g1+1,但可以访问到global g1的值
- 而直接对g1进行赋值时,将会新建一个局域变量g1,不会影响到全局的g1
nonlocal
使用nonlocal
访问外层非全局作用域(又称enclosing 作用域)
def f():
a = 1
def g():
print(a) # error
def f():
a = 1
def g():
nonlocal a
print(a) # ok
a += 1 # ok
g()
print(a) # 2