名称空间
-
名称空间
-
什么是名称空间
-
namespaces名称空间: 用于存放变量名与变量值绑定关系的地方(类似于民政局)
-
-
名称空间的分类
-
内置名称空间:存放内置的名字(python解释器提前定义好的 )
-
生命周期:python解释器启动则产生,关闭则销毁
-
-
全局名称空间:在py文件中顶格编写的代码运行之后都会存入全局名称空间
-
生命周期:运行python文件时则产生,python文件运行完毕则销毁
-
-
局部名称空间:函数体代码运行之后产生的都是局部名称空间
-
生命周期:调用函数则产生,函数调用完毕则销毁
-
-
-
# 内置名称空间: input <built-in function input> # built-in:内置 # 全局名称空间: x = 10 # 变量名X y = 20 # 变量名y f 1 > 0: z = 30 with open('a.txt', mode='wt') as f: a = 333 while True: c = 444 # 以上都是属于顶格的 # 局部名称空间: x = 10 # 全局名称空间 def foo(m): # 全局名称空间 m = 111 # 调用函数时,才会执行函数代码,名字m和n都存放于该函数的局部名称空间中 n = 222 # 函数内 foo(111) # 调用产生函数名称空间
名称空间的加载顺序是:内置名称空间--->全局名称空间--->局部名称空间
名称空间的查找顺序:
查找一个名字,必须从三个名称空间之一找到,要先确定自己当前在哪,基于当前所在的位置向外查找
如果当前你在局部查找,查找顺序为:局部名称空间--->全局名称空间--->内置名称空间
如果当前你在全局查找,查找顺序为:全局名称空间--->内置名称空间
len = 10 # 全局名称空间 def func(): # 函数 len = 20 # print(len) # 站在局部查找,找到的是20 func() # 调用产生局部名称空间 print(len) # 站在全局找,全局有找全局,全局没有找内置 # 局部名称空间的嵌套 '''函数在定义阶段名字的查找顺序就已经固定死了(特例)''' x = 111 def f1(): x = 222 def f2(): x = 333 def f3(): x = 444 def f4(): x = 555 print(x) # x = 555 特例 f4() f3() f2() # 通过调用f1 执行所有的函数 f1()

浙公网安备 33010602011771号