一:名称空间
1:什么是名称空间:
名称空间即:储存名字与值的内存地址关联关系的空间
2.名称空间的分类:
内置名称空间:存储器自带的一些名称与值的对应关系,如:print,len,max等;
生命周期为:在python解释器启动时创建,在解释器关闭时销毁
全局名称空间:除了内置的,函数内的都是在全局名称空间中
生命周期为:在执行文件时,创建全局名称空间,所有文件中的代码全部执行完毕后,销毁名称空间(即解释器关闭时)
局部名称空间:只要在函数内的名称空间就是局部的
生命周期为:调用函数时创建,函数执行完毕时就销毁
3.名称空间的加载顺序:内置的-->全局的-->局部的
名称空间的查找顺序:局部名称空间-->全局名称空间-->内置名称空间(基于当前位置向上层空间查找)
二. 作用域
域:区域,范围的意思
全局名称空间和内置名称空间在使用上没有什么区别,而局部的名称空间只能在局部使用
空间的范围:global 表示全局范围 就是所谓的全局作用域(globals 查看全局作用域的内容)
local 表示局部作用域
总结:1.查找名称的顺序是基于当前位置向上层空间查找
2.名称空间的嵌套关系是在函数定义阶段就固定死的,与调用位置无关
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# age=18 # def func2(): # # 明确声明使用全局的变量age(修改a的值) # global age # age=19 # func2() # print(age)
运行结果为: 19
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
a = 1 def func3(): a = 10 def inner(): # 明确声明 要使用上一层的 a 如果上一层没有,则使用上上一层,但是不能使用全局中的a nonlocal a a = 100 print(a) inner() print('这是func3中的a',a) func3()
运行结果为: 这是func3中的a 100