用户控制的命名空间是什么?

1 投票
2 回答
537 浏览
提问于 2025-04-18 01:32

提到 Python PEP8 的内容:

__双下划线开头和结尾__:这些是“魔法”对象或属性,它们存在于用户控制的命名空间中。比如 __init____import____file__。千万不要自己随便起这样的名字;只在文档中提到的情况下使用它们。

我浏览了很多关于在Python中使用下划线的问题,觉得我大部分都明白了(比如 私有 属性、名称重整 等等)。我也理解了上面提到的双下划线的用法。我猜这是为了保护像 __init__ 这样的函数,它们在C++和Java等语言中类似于构造函数。

但是,难道不应该叫 社区控制的命名空间 吗(这里的社区指的是Python社区)?作者说的 用户控制的命名空间 是什么意思呢?实际上,似乎意图正好相反:用户通常不应该随便动这些命名空间。

2 个回答

2

用户控制的命名空间就像全局变量或对象的属性。Python程序员可以随意在这些命名空间里放入自己想要的名字,其他人不喜欢也没办法。像 __init____file__ 这样的双下划线名字也在这些命名空间里,和程序员自己定义的普通名字一起存在。PEP 8的建议是,用户不要创建看起来像标准魔法名字的非标准名字。

2

用户控制的命名空间是指在Python编程中,用户可以控制哪些名称存在,以及这些名称对应的值是什么。换句话说,就是用户自己创建的API。意思是说,你不应该设计一个依赖于你自己随便想出来的新__doubleunderscore_names__的API。

这里的“命名空间”不是指命名的约定,而是指实际的编程范围。比如,每个函数都有一个本地命名空间,用来存放它的局部变量;一个模块有一个全局命名空间,用来存放它的全局变量,等等。用户肯定会使用这些命名空间——你会创建自己的变量、类、函数等等。这里的意思是,你不应该随便想出一些看起来很神秘的名字,然后把它们放进你的命名空间里。

撰写回答