python:从入门到放弃 08 名称空间与作用域
2022/3/18 22:27:34
本文主要是介绍python:从入门到放弃 08 名称空间与作用域,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 名称空间
- 内建名称空间
- 全局名称空间
- 局部名称空间
- 名称空间的生命周期
- 名称的加载与查找
- 作用域
- global与nonlocal关键字
- global
- nonlocal
- global与nonlocal关键字
名称空间
名称空间即存放名字与对象映射/绑定关系的地方。对于x=3,Python会申请内存空间存放对象3,然后将名字x与3的绑定关系存放于名称空间中,del x表示清除该绑定关系。
在程序执行期间最多会存在三种名称空间
内建名称空间
伴随python解释器的启动/关闭而产生/回收,因而是第一个被加载的名称空间,用来存放一些内置的名字,比如内建函数名
len() print() open()
全局名称空间
伴随python文件的开始执行/执行完毕而产生/回收,是第二个被加载的名称空间,文件执行过程中产生的名字都会存放于该名称空间中
name = 'jason' # 变量名name存入全局名称空间 def index(): # 函数名index存入全局名称空间 pass if True: a = 111 # 变量名a存入全局名称空间 for i in range(10): # 变量名i存入全局名称空间 pass while True: b = 222 # 变量名b存入全局名称空间
局部名称空间
伴随函数的调用/结束而临时产生/回收,函数的形参、函数内定义的名字都会被存放于该名称空间中
def index(): name = 'jason' # name存入局部名称空间
名称空间的生命周期
1.内置名称空间 python解释器运行 产生 python解释器关闭 销毁 2.全局名称空间 py文件开始运行 产生 py文件运行结束 销毁 3.局部名称空间 函数体代码开始运行 产生 函数体代码运行结束 销毁
名称的加载与查找
名称空间的加载顺序是:内置名称空间->全局名称空间->局部名称空间,而查找一个名字,必须从三个名称空间之一找到,查找顺序为:局部名称空间->全局名称空间->内置名称空间。
作用域
1.全局作用域:位于全局名称空间、内建名称空间中的名字属于全局范围,该范围内的名字全局存活(除非被删除,否则在整个文件执行过程中存活)、全局有效(在任意位置都可以使用);
2.局部作用域:位于局部名称空间中的名字属于局部范围。该范围内的名字临时存活(即在函数调用时临时生成,函数调用结束后就释放)、局部有效(只能在函数内使用)。
global与nonlocal关键字
global
'''gloabl关键字:局部修改全局不可变类型''' x=1 def foo(): global x #声明x为全局名称空间的名字 x=2 foo() print(x) #结果为2 """ 如果想要在局部修改全局的不可变类型 需要提前加关键字global申明 如果想要在局部修改全局的可变类型 不需要加关键字global申明 """
nonlocal
'''对于嵌套多层的函数,使用nonlocal关键字可以将名字声明为来自外部嵌套函数定义的作用域(非全局)''' def f1(): x=2 def f2(): nonlocal x x=3 f2() #调用f2(),修改f1作用域中名字x的值 print(x) #在f1作用域查看x f1() #结果 3 """ 局部名称空间嵌套的情况下 内层如果想要修改外层 情况1数据是不可变类型 需要使用关键字nonlocal 情况2数据是可变类型 不需要使用关键字nonlocal """
这篇关于python:从入门到放弃 08 名称空间与作用域的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-08有遇到过吗?同样的规则 Excel 中 比Python 结果大
- 2024-03-30开始python成长之路
- 2024-03-29python optparse
- 2024-03-29python map 函数
- 2024-03-20invalid format specifier python
- 2024-03-18pool.map python
- 2024-03-18threads in python
- 2024-03-14python Ai 应用开发基础训练,字符串,字典,文件
- 2024-03-13id3 algorithm python
- 2024-03-13sum array elements python