python名称空间知识点有哪些
本篇内容主要讲解“python名称空间知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python名称空间知识点有哪些”吧!
为泰兴等地区用户提供了全套网页设计制作服务,及泰兴网站建设行业解决方案。主营业务为成都做网站、网站建设、外贸营销网站建设、泰兴网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
命名空间的定义
python解释器在加载py文件时在内存中开辟的空间,该空间使用字典来存放对象与值。字典的键保存了py文件中的变量名、方法名、类名及其他环境变量名,对应的值保存了该对象的值(或内存地址或None)。
print(globals()) out: {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000020FF499EFD0>, '__spec__': None, '__annotations__': {}, '__builtins__':, '__file__': 'd:/Python/函数/关于函数的案例.py', '__cached__': None}
命名空间的分类
全局(Global names)名称空间
python解释器开始加载py文件时创造的名称空间,存储的对象包括全局变量名、方法名、类名及其他环境变量。
全局名称空间仅有一个。
局部(Local names)名称空间
python解释器在方法、类等执行时才会创建的临时名称空间,存储的对象是该方法或类内部的变量名、方法名等。
局部名称空间可以有多个,方法执行时创建结束后销毁。
方法内可定义方法:外层方法->外层局部名称空间;内层方法->内层局部名称空间。
内置(Built-in names)名称空间
python解释器用来保存内部模块builtins中的方法。
内置名称空间仅有一个。
命名空间的加载顺序
内置(Built-in)名称空间
全局(global)名称空间
局部(local)名称空间
取值顺序->LEGB原则
调用对象时python会按如下顺序查找:
局部(local)名称空间
非本地(Enclosing)名称空间
全局(Global)名称空间
内置(Built-in)名称空间
经过以上四步未能找到该对象名字时就会报错。
在同一个名称空间下,名字和对象是一 一对应的。在不同名称空间下,一个名字可以存在三个对象:局部对象、非本地对象、全局对象,python会按照LEGB原则就近查找。
text = 123 def out(): text = 456 print('out',text) def inner(): text = 789 print('inner',text) inner() out() print(text) out: out 456 inner 789 123
关于Global和nonlocal
在内层方法中可以直接引用全局(Global)名称空间和非本地(Enclosing)名称空间中的对象。
text1 = '全局名称空间变量' def out(): text2 = '外层名称空间变量' def inner(): print(text1) print(text2) inner() out() out: 全局名称空间变量 外层名称空间变量
在内层方法修改全局(Global)名称空间和非本地(Enclosing)名称空间中的对象会报错。
text1 = '全局名称空间变量' def out(): text2 = '外层名称空间变量' def inner(): # UnboundLocalError: local variable 'text1' referenced before assignment text1 += '在内层打印' # UnboundLocalError: local variable 'text2' referenced before assignment text2 += '在内层打印' print(text1) print(text2) inner() out()
如果确实需要修改,必须先声明,然后才能修改。
text1 = '全局名称空间变量' def out(): text2 = '外层名称空间变量' def inner(): global text1 nonlocal text2 text1 += '在内层修改' text2 += '在内层修改' print(text1) print(text2) inner() out() out: 全局名称空间变量在内层修改 外层名称空间变量在内层修改
到此,相信大家对“python名称空间知识点有哪些”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
网站栏目:python名称空间知识点有哪些
当前网址:http://pwwzsj.com/article/geihhd.html