码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-05-12 01:42:31      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:方法   修改   nbsp   全局变量   error   名称   保留   closed   搜索   

一: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规则

标签:方法   修改   nbsp   全局变量   error   名称   保留   closed   搜索   

原文地址:https://www.cnblogs.com/jack-zh/p/10841693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!