名称空间
一,名称空间详解

1,名称空间,就是存放名字的地方,是对栈区的一种划分,这样做是为了防止有相同名字误操作的一种措施
可以分为三种
-
- 内置名称空间,存放python解释器内置的名字
- 存活周期,打开python解释器启动就产生,关闭就销毁
- 全局名称空间,只要不是函数内定义,也不是内置的,剩下的都是全局名称空间
- 存活周期,python文件执行时则产生,关闭时则销毁
- 局部名称空间,在调用函数时,运行函数代码中产生函数内名字
- 存活周期,在调用时存活,关闭时销毁
- 内置名称空间,存放python解释器内置的名字
2,名字的查找优先级,当前位置向上一层层的查找
-
- 顶层:内置名称空间
- 中层:全局名称空间
- 底层:局部名称空间
-
1 第一种情况,先在局部里找名称 2 input=111 3 def fun(): 4 input=222 5 print(input) 6 fun() 7 ************* 8 222 9 第二种情况,先在局部里找,发现没有,就在全局里找 10 input=111 11 def fun(): 12 print(input) 13 fun() 14 ************* 15 111 16 第三种情况,局部、全局都没有,就在内置里找 17 def fun(): 18 print(input) 19 fun() 20 ************** 21 <built-in function input>
3,注意点
-
- 名称空间的嵌套关系是以函数定义阶段为准的,与调用关系无关
1 x=111 2 def fun(): 3 print(x) 4 def poo(): 5 x=555 6 fun() #这个x的变量是以定义位置为准,poo与fun是平级关系,不会互找的 7 poo() 8 ********* 9 111
- 名称空间的嵌套关系是以函数定义阶段为准的,与调用关系无关
4,作用域
-
- 全局作用域:内置名称空间、全局名称空间
- 特点(存活是指没有被垃圾回收,有效是指能被访问到)
- 全局存活
- 全局有效,被所有函数共享
- 特点(存活是指没有被垃圾回收,有效是指能被访问到)
- 局部作用域
- 临时存活
- 临时有效
- 全局作用域:内置名称空间、全局名称空间
5,global与nonlocal
-
- global,用于对不可变类型在局部位置修改全局名字对应的值
x=1 def foo(): global x #声明x为全局名称空间的名字 x=2 foo() print(x) #结果为 - nonlocal,当前函数的外层函数开始一层层去查找名字x,若是一直到最外层函数都找不到,则会抛出异常。,针对的是不可变类型
1 1 def f1(): 2 2 x=2 3 3 def f2(): 4 4 nonlocal x 5 5 x=3 6 6 f2() #调用f2(),修改f1作用域中名字x的值 7 7 print(x) #在f1作用域查看x 8 8 9 9 f1()
- 对于可变函数可以直接从局部修改外层
1 x=[] 2 def fun(): 3 x.append(111) 4 fun() 5 print(x) 6 *********** 7 [111]
- global,用于对不可变类型在局部位置修改全局名字对应的值
posted on 2024-02-04 04:16 我才是最帅的那个男人 阅读(15) 评论(0) 收藏 举报
浙公网安备 33010602011771号