什么是Python名称空间

Sri*_*aju 43 python programming-languages namespaces

我刚刚开始学习Python并且在Python中遇到了"命名空间"概念.虽然我得到了它的概念,但我无法理解这个概念的严重性.

网上的一些浏览显示,针对PHP的一个原因是它没有对命名空间的本机支持.

有人可以解释如何使用命名空间以及此功能如何使编程更好(不仅仅是在Python中,因为我假设命名空间不是限于特定语言的概念).

我主要来自Java和C编程背景.

S.L*_*ott 46

命名空间是一种实现范围的方法.

在Java(或C)中,编译器通过静态范围分析确定变量的可见位置.

  • 在C中,范围是函数的主体,也可以是全局的,也可以是外部的.编译器会为您解释此问题,并根据范围规则解析每个变量名称.编译完所有模块后,链接器将解析外部名称.

  • 在Java中,scope是方法函数的主体,或类的所有方法.某些类名也具有模块级范围.同样,编译器在编译时计算出来并根据范围规则解析每个名称.

在Python中,每个包,模块,类,函数和方法函数都拥有一个"名称空间",其中解析了变量名称.另外,如果名称不在本地名称空间中,则使用全局名称空间.

在本地命名空间(函数体,模块等)中检查每个变量名,然后在全局命名空间中进行检查.

变量通常仅在本地名称空间中创建.该globalnonlocal语句可以比本地命名空间创建其他变量.

当评估函数,方法函数,模块或包(即,开始执行)时,将创建命名空间.将其视为"评估背景".当函数或方法函数等完成执行时,将删除命名空间.变量被删除.也可以丢弃对象.

  • namespace是一种在作用域内实现名称管理的方法,因为作用域不仅仅是名称管理.看到我的回答. (2认同)

mik*_*kej 5

命名空间可以防止类,方法和对象之间发生冲突,这些冲突可能由不同的人编写.

来自Java背景,您可能熟悉如何使用包实现这一点,例如,您可以创建一个movieyoda.DateUtils类,我可以创建一个mikej.DateUtils类,该包允许使用类来区分它们.(Python有一些非常相似的东西.)

命名空间在5.3.0中添加到PHP中,但在早期版本中(以及其他不提供命名空间的语言),您必须在类和方法名称前加上一些内容,以降低名称冲突的风险.例如一个movieyoda_parse_file功能.