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

Posted jack-zh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()

 

以上是关于Python入门-5函数:10nonlocal-global-LEGB规则的主要内容,如果未能解决你的问题,请参考以下文章

Python 入门:数据类型

python入门五(函数)5-2 python中递归函数

Python基础知识入门

Python入门5

Python入门:内置函数

python入门五(函数)5-1 python中函数的定义