• LEGB规则


    链接:https://www.cnblogs.com/GuoYaxiang/p/6405814.html

    命名空间

    大约来说,命名空间就是一个容器,其中包含的是映射到不同对象的名称。你可能已经听说过了,Python中的一切——常量,列表,字典,函数,类,等等——都是对象。
    这样一种“名称-对象”间的映射,使得我们可以通过为对象指定的名称来访问它。举例来说,如果指定一个简单的字符串  a_string = "Hello string",我们就创建了一个对象“Hello string”的引用,之后我们就可以通过它的名称a_string来访问它。

    命名空间也有不同的层次(也就是所谓的“作用域”)

    通过LEGB规则对变量名进行作用域解析

    我们已经知道了多个命名空间可以独立存在,而且可以在不同的层次上包含相同的变量名。“作用域”定义了Python在哪一个层次上查找某个“变量名”对应的对象。接下来的问题就是:“Python在查找‘名称-对象’映射时,是按照什么顺序对命名空间的不同层次进行查找的?”

    答案就是:使用的是LEGB规则,表示的是Local -> Enclosed -> Global -> Built-in,其中的箭头方向表示的是搜索顺序。


    Local 可能是在一个函数或者类方法内部。
    Enclosed 可能是嵌套函数内,比如说 一个函数包裹在另一个函数内部。
    Global 代表的是执行脚本自身的最高层次。
    Built-in 是Python为自身保留的特殊名称。


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

  • 相关阅读:
    shell提交hive sql保存运行过程日志
    hive中 exists与left semi join
    hbase shell 导出数据转json
    ubuntu使用
    fast json
    elasticsearch 用户密码配置
    linux 自带php切换xampp
    Ubuntu查看crontab运行日志
    Linux服务器 XAMPP后添加PHP和MYSQL环境变量
    HBuilder 模拟器
  • 原文地址:https://www.cnblogs.com/windyrainy/p/10659427.html
Copyright © 2020-2023  润新知