函数作用域global和nonlocal
函数作用域 自己有用自己的 自己没有用上一层 一层一层往上找:
num = 0
def one():
print(num) #自己没有且没有上一层了用全局 0
num = 1
def two():
num =2
def three():
print(num)#自己没有往上找 2
three()
print(num)#自己有用自己的 2
two()
print(num)#1自己有用自己的
one()
print(num) #用自己的
global:定义一个全局变量
global定义一个全局变量 自己有用自己的 自己没有用上一层的 global num 代替函数外的num 成为全局变量
num = 0
def one():
print(num) #自己没有且没有上一层了用全局 0 这时还没有 global这回事
def two():
global num =2
def three():
print(num)#自己没有往上找 2
three()
print(num)#自己有用自己的 2
two()
print(num)#2 现在自己没有也没有上一层了 就用全局变量 有global global num成为此函数中的全局变量了
one()
print(num) #2 此时global num num=2 取代 num = 0 成为全局变量
nonlocal:只能影响到上一层
num =0
def one():
print(num)#这个时候没有nonlocal 0
def two():
num = 2
print(num)# 这个时候没有 nonlocal 2
def three():
nonlocal num
num = 3
print(num)#用自己的 3
three()
print(num)#有了global 3
two()
print(num)#nonlocal 只能影响他的上一层 这个是他的上二层了 自己没有用上一层 上一层没有找全局 0
one()
print(num) 0