Python命名空间:名字管理的秘密

什么是命名空间?

你可以把 命名空间 想象成一个“名字的电话簿”:

  • 它记录了你程序中使用的各种名字(变量名、函数名、类名等)和它们对应的内容。
  • 比如你写了一个变量 x = 10,Python 就会在某个命名空间里记下:“哦,用户用了 x 这个名字,它代表的是 10。”

命名空间的类型(就像不同的电话本)

Python 中有几种不同作用范围的命名空间,我们可以理解为是不同层级的“电话本”:

1. 内置命名空间(Built-in Namespace)

  • 是 Python 自带的,比如 print()len() 等这些函数都在这里。
  • 就像你手机里的默认联系人列表。

2. 全局命名空间(Global Namespace)

  • 指的是你在模块(也就是 .py 文件)里定义的变量、函数等。
  • 就像你自己添加的联系人。

3. 局部命名空间(Local Namespace)

  • 指的是在函数内部定义的名字。
  • 就像你在开会时临时记下的一个人名,会议结束后可能就忘了。

举个例子更好懂!

x = 10  # 全局变量 → 在全局命名空间中

def my_func():
    y = 20  # 局部变量 → 在局部命名空间中
    print(y)
    print(x)  # 可以访问全局变量

my_func()
  • 当你运行这段代码:
    • x 存在 全局命名空间
    • y 存在 局部命名空间(只在 my_func 函数里能用)。
    • 函数里打印 x 是没问题的,因为 Python 会先看局部有没有,没有就去全局找。

命名空间的作用顺序(LEGB 规则)

当你要使用一个变量或函数名时,Python 会按照以下顺序查找这个名字:

L → E → G → B

缩写 含义 说明
L Local 当前函数内的命名空间
E Enclosing 外层嵌套函数的命名空间(如果有嵌套函数)
G Global 当前模块的全局命名空间
B Built-in 内置命名空间(比如 len, print 等)

✅ 小结一下(一句话记住):

命名空间就是 Python 用来管理“名字”的地方,不同作用域有不同的命名空间。Python 查找变量时,会按“局部 → 外层 → 全局 → 内置”的顺序来找。


补充一点:命名空间 VS 作用域

术语 解释
命名空间 存储名字和对象映射的地方(像是一个字典)
作用域 决定命名空间在哪个区域可以被访问(是一个规则)

你可以理解为:

  • 命名空间 是存放名字的地方;
  • 作用域 是你能访问哪些命名空间的权限。

你可能感兴趣的:(Python命名空间:名字管理的秘密)