关键词:
Python的命名空间是Python程序猿必须了解的内容,对Python命名空间的学习,将使我们在本质上掌握一些Python中的琐碎的规则。
接下来我将分四部分揭示Python命名空间的本质:一、命名空间的定义;二、命名空间的查找顺序;三、命名空间的生命周期;四、通过locals()和globals() BIF访问命名空间
重点是第四部分,我们将在此部分观察命名空间的内容。
一、命名空间
1 info = "Adress : " 2 def func_father(country): 3 def func_son(area): 4 city= "Shanghai " #此处的city变量,覆盖了父函数的city变量 5 print(info + country + city + area) 6 city = " Beijing " 7 #调用内部函数 8 func_son("ChaoYang "); 9 10 func_father("China ")
输出:Adress : China Shanghai ChaoYang
i=1 def func2(): i=i+1 func2(); #错误:UnboundLocalError: local variable ‘i‘ referenced before assignment
由于创建命名空间时,python会检查代码并填充局部命名空间。在python运行那行代码之前,就发现了对i的赋值,并把它添加到局部命名空间中。当函数执行时,python解释器认为i在局部命名空间中但没有值,所以会产生错误。
def func3(): y=123 del y print(y) func3() #错误:UnboundLocalError: local variable ‘y‘ referenced before assignment #去掉"del y"语句后,运行正常
四、命名空间的访问
def func1(i, str ): x = 12345 print(locals()) func1(1 , "first")
输出:‘str‘: ‘first‘, ‘x‘: 12345, ‘i‘: 1
‘‘‘Created on 2013-5-26‘‘‘ import copy from copy import deepcopy gstr = "global string" def func1(i, info): x = 12345 print(locals()) func1(1 , "first") if __name__ == "__main__": print("the current scope‘s global variables:") dictionary=globals() print(dictionary)
输出:(我自己给人为的换行、更换了顺序,加颜色的语句下面重点说明)
def func1(i, info): x = 12345 print(locals()) locals()["x"]= 6789 print("x=",x) y=54321 func1(1 , "first") globals()["y"]= 9876 print( "y=",y)
输出:
phpphp命名空间(代码片段)
javascriptjavascript命名空间(代码片段)
javascriptjavascript命名空间(代码片段)
htmlviewhelper命名空间(代码片段)
作用域与命名空间(代码片段)
python命名空间的本质一、命名空间Python使用叫做命名空间的东西来记录变量的轨迹。命名空间是一个字典(dictionary),它的键就是变量名,它的值就是那些变量的值。Anamespaceisamappingfromnamestoobjects.MostnamespacesarecurrentlyimplementedasPy... 查看详情
phpphalcon注册命名空间(代码片段)
sh杀死命名空间(代码片段)
javascript命名空间功能(代码片段)
django(命名空间)(代码片段)
命名空间命名空间(英语:Namespace)是表示标识符的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识... 查看详情
第七天(代码片段)
第一部分命名空间 命名空间:保存名字的容器名字:定义函数名字、变量名字、类名字、模块、包...容器:list,tuple,set形式:键(名字)值(内存对象)对每个函数、变量都有自己的命名空间在哪定义?什么时候定义?函数... 查看详情
9.类名与命名空间(代码片段)
1#include<iostream>2usingnamespacestd;34//扩展标准命名空间5//数据类型可以放在命名空间,避免冲突6namespacestd78//拥有class所有功能9structdata1011inta;12intb;13//声明14intgetadd();15;161718//实现19intstd::data::getadd()//命名空间:: 查看详情
xml名命空间(代码片段)
XML的名命空间就类似于java的包,命名空间定义:xmlns:***="URL",默认命名空间定义:xmlns="URL"引号中的URL内容用来唯一标识命名空间,不能重复。上面定义的***可用于元素或属性,使用格式:***:元素名/属性名,后面部分不变。在... 查看详情
texttinyrefl解析器错误,找不到全局命名空间中的命名空间(代码片段)
c++命名空间与缺省参数(代码片段)
目录命名空间为什么引入命名空间命名空间定义使用命名空间标准命名空间缺省参数缺省参数概念缺省参数分类全缺省参数半缺省参数命名空间为什么引入命名空间在C++中,变量、函数和类都是大量存在的,这些变... 查看详情