Python入门基础篇 No.64 —— nonlocal 关键字_LEGB 规则

Python入门基础篇 No.64 —— nonlocal 关键字_LEGB 规则


文章目录

  • Python入门基础篇 No.64 —— nonlocal 关键字_LEGB 规则
  • 前言
  • 一、nonlocal 关键字
  • 二、LEGB 规则
  • 总结

前生篇:嵌套函数_内部函数_数据隐藏


前言

Python入门基础篇 No.64 —— nonlocal 关键字_LEGB 规则_第1张图片


一、nonlocal 关键字

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

代码演示:

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

a = 100


def outer():
    b = 10

    def inner():
        nonlocal b  # 声明外部函数的局部变量
        print('inner b:', b)
        b = 20

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

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


outer()
print('a:', a)
------------------------------
inner b: 10
outer b: 20
a: 1000

Python入门基础篇 No.64 —— nonlocal 关键字_LEGB 规则_第2张图片

二、LEGB 规则

  • Python 在查找“名称”时,是按照 LEGB 规则查找的:

Local–>Enclosed–>Global–>Built in

  • Local 指的就是函数或者类的方法内部
  • Enclosed 指的是嵌套函数(一个函数包裹另一个函数,闭包)
  • Global 指的是模块中的全局变量
  • Built in 指的是 Python 为自己保留的特殊名称。
  • 如果某个 name 映射在局部(local)命名空间中没有找到,接下来就会在闭包作用域(enclosed)进行搜索,如果闭包作用域也没有找到,Python 就会到全局(global)命名空间中进行查找,最后会在内建(built-in)命名空间搜索 (如果一个名称在所有命名空间中都没有找到,就会产生一个 NameError)。

代码演示:

# 测试LEGB

# str = 'Offer'


def outer():
    # str = 'outer'

    def inner():
        # str = 'inner'
        print(str)

    inner()


outer()
-------------------------------
<class 'str'>
  • 我们依次将几个 str 注释掉,观察控制台打印的内容,体会 LEBG 的搜索顺序。

Python入门基础篇 No.64 —— nonlocal 关键字_LEGB 规则_第3张图片


总结

以上帮各位总结好了,收藏,关注即可查收。

前生篇:嵌套函数_内部函数_数据隐藏


关注下方公众号,免费拿Python学习资料!!!

Python入门基础篇 No.64 —— nonlocal 关键字_LEGB 规则_第4张图片

你可能感兴趣的:(#,基础,python,编程语言,windows,经验分享,程序人生)