冬西

导航

函数作用域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

 

posted on 2019-12-23 15:35  冬西  阅读(227)  评论(0编辑  收藏  举报