zoukankan      html  css  js  c++  java
  • 名称空间

    名称空间

    又名name space,名称空间就是存放变量名与变量值绑定关系的地方

    名称空间共3种,分别如下

    • locals: 是函数内的名称空间,包括局部变量和形参(locals打印当前所在名称空间里的所有局部变量)
    • globals: 全局变量,函数定义所在模块的名字空间(globals打印脚本所有变量)
    • builtins: 内置模块的名字空间

    不同变量的作用域不同就是由这个变量所在的命名空间决定的。

    作用域即范围

    • 全局范围:全局存活,全局有效
    • 局部范围:临时存活,局部有效

    查看作用域方法 globals(),locals()

    有了名称空间,才有了作用域

    作用域(scope)查找顺序

    level = 'L0'
    n = 22
    
    def func():
        level = 'L1'
        n = 33
        print(locals())   # level = L1, n = 33
    
        def outer():
            n = 44
            level = 'L2'
            print(locals(),n) # level = 'L2' , n = 44
    
            def inner():
                level = 'L3'
                print(locals(),n) #此外打印的n是多少?44
            inner()
        outer()
    
    func()
    

      输出:

    {'level': 'L1', 'n': 33}
    {'level': 'L2', 'n': 44} 44
    {'level': 'L3', 'n': 44} 44

    问题:在inner()里的打印的n的值是多少?44

    LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> __builtins__

      • locals 是函数内的名字空间,包括局部变量和形参
      • enclosing 外部嵌套函数的名字空间(相邻的上一级)
      • globals 全局变量,函数定义所在模块的名字空间
      • builtins 内置模块的名字空间
  • 相关阅读:
    【源码剖析】HashMap1.7 详解
    友链
    P4747 [CERC2017]Intrinsic Interval
    Educational Codeforces Round 97 简要题解
    CF908D New Year and Arbitrary Arrangement(期望 dp)
    一个方便的自定义注解,管理实体类
    Leetcode 657 机器人能否回到原点
    Leetcode 695 岛屿的最大面积 二维平面DFS
    WebSocket 的简单用例
    俄罗斯方块JAVA
  • 原文地址:https://www.cnblogs.com/fantsaymwq/p/9597126.html
Copyright © 2011-2022 走看看