美文网首页
命名空间和类变量

命名空间和类变量

作者: W_I_S_E | 来源:发表于2017-02-25 14:31 被阅读0次
  • 获取类C的命名空间 C.dict

  • 获取类C的实例c的命名空间 c.dict

  • 获取函数f的命名空间 在内部使用locals()

  • 获取module的命名空间 globals()

事实上,命名空间就是存储name和对象的对应关系的,那么当我们通过一个name来获取一个对象的时候,其查找命名空间的顺序在Python中是遵循LEGB的原则的。

(LEGB:Local -> Enclosing Function -> Global -> Builtins)

也就是说,遇到一个name的时候,Python解释器首先会去Local本地命名空间中查找,然后再去其所在函数的作用域中查找,如果还没找到,就会去Global全局命名空间中查找,最后会去__builtin__(Python-builtinbuiltins的区别与关系(超详细,经典))这个模块中去查找。

供测试代码:

x = 1234

__builtins__.s = 'Hello, World!'

y = 'c'
test = '1'


def test():
    y = 'abc'
    print(x)
    print(y)
    print(s)
    print(locals())


test()
print(test)

var = 0

out_function = 1


def out_function():
    var = 1

    def inner_function():
        print(var)
        print(globals())

    print(locals())
    inner_function()


print(out_function)
out_function()

在上面的代码中,遵循LEGB原则,譬如输出var,inner_function的local()没有,然后在包裹它的封闭函数内找。

注意:inner_function在out_function的locals()中.out_function在globals()中,也就是说它和前一个out_function是平级的,所以后一个会覆盖前一个;如果把前一个移到后面,则调用out_function()会报错

相关文章

  • 命名空间和类变量

    获取类C的命名空间 C.dict 获取类C的实例c的命名空间 c.dict 获取函数f的命名空间 在内部使用loc...

  • 命名空间

    在php中,为了避免重复的类名和变量名造成冲突,php-5.3开始可以使用命名空间来组织类和变量等。 定义命名空间...

  • ts 命名空间

    1. ts 命名空间内元素的导出和导入 新建 student.ts,创建命名空间,导出接口、类、函数、变量 新建 ...

  • C++之命名空间

    命名空间的核心目的:解决命名冲突 命名空间的内容可以是 符号常量、变量、函数、结构、枚举、类和对象等等。 创建一个...

  • C++ 项目相关知识命名空间

    命名空间 命名空间一般是对全局变量,函数,类做处理的,以防多个重名变量引起的重定义错误。命名空间主要分为三种 你指...

  • 命名空间 namespace

    命名空间 附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义...

  • android 源码阅读的C++语法准备5 命名空间 预处理器

    命名空间 用以区分不同库中相同名称的函数、类、变量等。本质上,命名空间就是定义了一个范围,使用了命名空间即定义了上...

  • vs中代码图标及信号标识

    “类视图”和“对象浏览器”显示表示代码实体的图标,如命名空间、类、函数和变量。 下表展示和描述了图标。 图标描述图...

  • 【深入理解Java虚拟机 】类加载器的命名空间以及类的卸载

    类加载器的命名空间 每个类加载器又有一个命名空间,由其以及其父加载器组成 类加载器的命名空间的作用和影响 每个类加...

  • c++命名空间

    一.命名空间的三种引用 1.第一种引入命名空间变量 2.第二种引入命名空间变量 3.第三种引入命名空间变量 二.命...

网友评论

      本文标题:命名空间和类变量

      本文链接:https://www.haomeiwen.com/subject/zjtnwttx.html