美文网首页Python
关于 Python 命名空间

关于 Python 命名空间

作者: kakarotto | 来源:发表于2019-05-15 11:05 被阅读0次

    在 Python 中,使用命名空间记录变量。
    Python 中的命名空间就像是一个 dict ,key 是变量的名字,value 是变量的值。

    • Python 中,每个函数都有一个自己的命名空间,叫做 local namespace,它记录了函数的变量。
    • Python中,每个 module 有一个自己的命名空间,叫做 global namespace,它记录了 module 的变量,包括 functions, class 和其它imported modules,还有 module 级别的变量和常量。
    • 还有一个 build-in 命名空间,可以被任意模块访问,这个 build-in命名空间中包含了build-in function 和 exceptions。

    当 Python中的某段代码要访问一个变量 x 时,Python 会在所有的命名空间中寻找这个变量,查找的顺序为:

    • local namespace - 指的是当前函数或者当前类方法。如果在当前函数中找到了变量,停止搜索
    • global namespace - 指的是当前的模块。如果在当前模块中找到了变量,停止搜索
    • build-in namespace - 如果在之前两个namespace中都找不到变量x,python会假设x是build-in的函数或者变量。如果x不是内置函数或者变量,python会报错NameError。

    对于闭包来说,这里有一点区别,如果在local namespace中找不到变量的话,还会去父函数的local namespace中找变量。

    内置函数 locals(), 返回当前函数(方法)的局部命名空间
    内置函数 globals(),返回当前module的命名空间
    locals()globals()有一个区别是,locals只读,globals可以写

    from module import 和 import module
    使用import module时,module本身被引入,但是保存它原有的命名空间,所以我们需要使用module.name这种方式访问它的 函数和变量。
    from module import这种方式,是将其它模块的函数或者变量引到当前的命名空间中,所以就不需要使用module.name这种方式访问其它的模块的方法了。

    if __name__ trick
    python中的module也是对象,所有的modules都有一个内置的属性name,模块的name属性的值取决于如何使用这个模块,如果import module,那么name属性的值是模块的名字。如果直接执行这个模块的话,那么name属性的值就是默认值main

    module的一些内置属性

    name: 上面已经介绍过
    file : 当前module的绝对路径
    dict
    doc
    package:
    path:

    原文:https://blog.csdn.net/u012436149/article/details/72819539

    相关文章

      网友评论

        本文标题:关于 Python 命名空间

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