(一)Python入门-5函数:10nonlocal-global-LEGB规则

一:nonlocal关键字

  nonlocal 用来声明外层的局部变量。

  global 用来声明全局变量。

#测试nonlocal、global关键字的用法

a = 100
def outer():
    b = 10
    def inner():
        nonlocal b      #声明外部函数的局部变量
        print('inner:b',b)
        b = 20      #内部函数中修改了外部函数变量b的值

    global a    #声明全局变量
    a = 200

    inner()
    print('outer:b',b)

outer()
print('a:',a)

运行结果:

  inner:b 10
  outer:b 20
  a: 200

二:LEGB规则

  Python在查找“名称”时,是按照LEGB规则查找的: Local-->Enclosed-->Global-->Built in

    Local 指的就是函数或者类的方法内部

    Enclosed 指的是嵌套函数(一个函数包裹另一个函数,闭包)

    Global 指的是模块中的全局变量

    Built in 指的是Python为自己保留的特殊名称。

  如果某个name映射在局部(local)命名空间中没有找到,接下来就会在闭包作用域 (enclosed)进行搜索,如果闭包作用域也没有找到,Python就会到全局(global)命名空 间中进行查找,最后会在内建(built-in)命名空间搜索 (如果一个名称在所有命名空间 中都没有找到,就会产生一个NameError)。

#测试LEGB

str = "global"
def outer():
    #str = "outer"
    def inner():
        #str = "inner"
        print(str)
    inner()

outer()

 

posted on 2019-05-11 23:34  JACK#zhang  阅读(221)  评论(0编辑  收藏  举报