标签:reference importlib imp 错误 重点 ring none == 异常
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
1 i=1 2 def func2(): 3 i=i+1 4 5 func2(); 6 #错误:UnboundLocalError: local variable ‘i‘ referenced before assignment
由于创建命名空间时,python会检查代码并填充局部命名空间。在python运行那行代码之前,就发现了对i的赋值,并把它添加到局部命名空间中。当函数执行时,python解释器认为i在局部命名空间中但没有值,所以会产生错误。
1 def func3(): 2 y=123 3 del y 4 print(y) 5 6 func3() 7 #错误:UnboundLocalError: local variable ‘y‘ referenced before assignment 8 #去掉"del y"语句后,运行正常
四、命名空间的访问
1 def func1(i, str ): 2 x = 12345 3 print(locals()) 4 5 func1(1 , "first")
输出:{‘str‘: ‘first‘, ‘x‘: 12345, ‘i‘: 1}
1 ‘‘‘Created on 2013-5-26‘‘‘ 2 3 import copy 4 from copy import deepcopy 5 6 gstr = "global string" 7 8 def func1(i, info): 9 x = 12345 10 print(locals()) 11 12 func1(1 , "first") 13 14 if __name__ == "__main__": 15 print("the current scope‘s global variables:") 16 dictionary=globals() 17 print(dictionary)
输出:(我自己给人为的换行、更换了顺序,加颜色的语句下面重点说明)
1 def func1(i, info): 2 x = 12345 3 print(locals()) 4 locals()["x"]= 6789 5 print("x=",x) 6 7 y=54321 8 func1(1 , "first") 9 globals()["y"]= 9876 10 print( "y=",y)
输出:
标签:reference importlib imp 错误 重点 ring none == 异常
原文地址:http://www.cnblogs.com/tianyiliang/p/7788543.html