首页 / PYTHON / Python中的命名空间概念
Python中的命名空间概念
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python中的命名空间概念,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2350字,纯文字阅读大概需要4分钟。
内容图文
![Python中的命名空间概念](/upload/InfoBanner/zyjiaocheng/837/99e4239d7bc2432ca5e9c25dd08c559f.jpg)
python中,每个函数都有一个自己的命名空间,叫做local namespace,它记录了函数的变量。
python中,每个module有一个自己的命名空间,叫做global namespace,它记录了module的变量,包括 functions, classes 和其它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 内置函数locals(), 返回当前函数(方法)的局部命名空间 ?
def func(a = 1): b = 2 print(locals()) return a+b func() # {'a': 1, 'b': 2} 可以看出,locals返回的是个dict123456
globals 内置函数globals(),返回当前module的命名空间 ?
def func(a = 1): b = 2 return a+b func() print(globals()) # globals()返回的也是个dict12345
? locals()和globals()有一个区别是,locals只读,globals可以写 ?
def func(a = 1): b = 2 return a+b func() glos = globals() glos['new_variable'] = 3 print(new_variable) # 3 , 我们并没有显示定义new_variable这个变量,只是在globals中添加了这个key,在随后的代码中, #就可以像访问一般变量一样来访问。 def func(a = 1): b = 2 locs = locals() locs['c'] = 1 print(c) func() # NameError: name 'c' is not defined1234567891011121314151617
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__:
内容总结
以上是互联网集市为您收集整理的Python中的命名空间概念全部内容,希望文章能够帮你解决Python中的命名空间概念所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。