python命名空间和作用域
命名空间是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的
命名空间查找顺序:局部命名空间、全局命名空间、内置命名空间
相同的对象名称可以存在于多个命名空间中
作用域就是一个可以直接访问命名空间的正文区域。程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。python的作用域共有四种:
L(Local):最内层,包含局部变量,比如一个函数/方法内部
E(Enclosing):包含了非局部也非全局的变量。比如两个嵌套函数中间的变量
G(Global):当前脚本的最外层,比如当前模块的全局变量
B(Built-in):包含了内建的变量/关键字等,最后被搜索(通过builtins标准模块实现,要先导入)
规则顺序:L、E、G、B
python中只有模块、类、函数才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)不会引入新的作用域,这些语句内定义的变量,外部也可以访问
例如:
def aFunction(): a = 1 return a print(a)
结果会报错:
print(a) NameError: name 'a' is not defined
例如:
if True: a = 1 print(a)
结果不会报错:
1
全局变量和局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问
如果想在局部作用域想修改全局作用域的变量,要使用global关键字:
a = 1 def changeA(): global a a = 2 print(a) changeA()
结果为:
2
也可以用通过函数参数传递:
a = 1 def changeA(a): a = 2 print(a) changeA(a)
结果为:
2
如果想修改嵌套作用域的变量需要使用nonlocal关键字
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码