名称空间与作用域
用于存放变量名与变量值绑定关系的地方
名称空间的分类
1. 内置名称空间
python解释器提前定义好的
eg: print()
len()....
2. 全局名称空间
在py文件中顶格编写的代码运行之后都会存入全局名称空间
name = 'jason'
def func():
pass
if 1:
a = 123
for i in range(10):
print(i)
while True:
a = 123
3. 局部名称空间
函数体代码运行之后产生的都是局部名称空间
存活周期
1.内置名称空间
python解释器启动与关闭创建和销毁
2.全局名称空间
随着py文件的运行与结束而创建和销毁
3.局部名称空间
随着函数体代码的执行与结束而创建和销毁
名字查找顺序
1.如果你在局部
局部 >>> 全局 >>> 内置
2.如果你在全局
全局 >>> 内置
'''函数在定义阶段名字的查找顺序就已经固定死了(特例)'''
x = 111
def f1():
x = 222
def f2():
x = 333
def f3():
x = 444
def f4():
x = 555
print(x)
f4()
f3()
f2()
f1()
作用域
名称空间所能够作用的范围
全局作用域与局部作用域
按照名字作用范围的不同可以将三个名称空间划分为两个区域:
1. 全局作用域:位于全局名称空间、内建名称空间中的名字属于全局范围,该范围内的名字全局存活(除非被删除,否则在整个文件执行过程中存活)、全局有效(在任意位置都可以使用)
2.局部作用域:位于局部名称空间中的名字属于局部范围。该范围内的名字临时存活(即在函数调用时临时生成,函数调用结束后就释放)、局部有效(只能在函数内使用)
3. 内置作用域:
程序任何阶段任何位置均可使用(全局有效)
global与nonlocal关键字使用
global 例:
特殊:
'''
如果想在局部修改全局数据
如果数据为不可变类型则需要关键字global声明
如果数据为可变类型则不需要关键字global声明
'''
def f1():
x=2
def f2():
nonlocal x
x=3
f2()
print(x)
f1()
'''
如果想要在内部的局部修改外部局部的不可变类型数据
需要关键字nonlocal声明
'''
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)