你可以把 命名空间 想象成一个“名字的电话簿”:
x = 10
,Python 就会在某个命名空间里记下:“哦,用户用了 x 这个名字,它代表的是 10。”Python 中有几种不同作用范围的命名空间,我们可以理解为是不同层级的“电话本”:
print()
、len()
等这些函数都在这里。.py
文件)里定义的变量、函数等。x = 10 # 全局变量 → 在全局命名空间中
def my_func():
y = 20 # 局部变量 → 在局部命名空间中
print(y)
print(x) # 可以访问全局变量
my_func()
x
存在 全局命名空间。y
存在 局部命名空间(只在 my_func
函数里能用)。x
是没问题的,因为 Python 会先看局部有没有,没有就去全局找。当你要使用一个变量或函数名时,Python 会按照以下顺序查找这个名字:
L → E → G → B
缩写 | 含义 | 说明 |
---|---|---|
L | Local | 当前函数内的命名空间 |
E | Enclosing | 外层嵌套函数的命名空间(如果有嵌套函数) |
G | Global | 当前模块的全局命名空间 |
B | Built-in | 内置命名空间(比如 len, print 等) |
命名空间就是 Python 用来管理“名字”的地方,不同作用域有不同的命名空间。Python 查找变量时,会按“局部 → 外层 → 全局 → 内置”的顺序来找。
术语 | 解释 |
---|---|
命名空间 | 存储名字和对象映射的地方(像是一个字典) |
作用域 | 决定命名空间在哪个区域可以被访问(是一个规则) |
你可以理解为: