名称空间和作用域
名称空间定义:内存有一块内存存储变量名与变量间的绑定关系的空间,存放名字(变量名/函数名) 1.内置名称空间内置名称空间是python解释器独有的,存放python解释器自带的名字,如int,float,len 当Python解释器启动的时候python自动开辟内置名称空间存放了这些python的内置方法,python解释器停止解释之后才会销毁. 2.全局名称空间除了内置和局部的名字之外,其他都存储在全局名称空间 全局需要自己定义,python文件执行之后才可能有全局名称空间,文件结束之后才会销毁 3.局部名称空间函数内定义的变量名/函数名都存放在局部名称空间 局部也需要自己定义,必须得在函数调用之后才会生成,调用结束之后就会销毁 执行顺序三种名称空间的执行顺序:内置--->全局--->局部 查找顺序当前的所在位置开始查找,如果当前所在的位置为局部名称空间,则查找顺序为:局部--->全局--->内置 作用域产生作用的范围 x=1 def f1() x=3 print(x) #x=1和x=3的x不是同一个东西 全局作用域:全局+内置名称空间中的变量,全局作用域中的变量只能在全局中使用 局部作用域:局部名称空间中的变量,局部作用域中的变量只能在局部中使用 x = 1 def f1(): return x print(x) def f2(): x = 2 # x=2只能在f2中使用 f1() f2() # f1中的局部和f2中的局部互不干涉 1 作用域关系在函数定义阶段就已经确定死了 拓展global(修改全局作用域中的变量) x = 1 def f1(): global x # 声明x为全局的x x = 3 f1() print(x) 3 nonlocal(修改局部作用域中的变量) def f1(): x = 1 def f2(): nonlocal x # 针对嵌套函数局部之间的修改 x = 3 f2() print(x) f1() 3 注意点
lt = [1,2,3] # 作用域关系仅适用不可变数据类型,不适用于可变数据类型 def f1(): lt.append(4) f1() print(lt) [1,3,4] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |