有没有 Python 的“魔法常数”的综合表?
Posted
技术标签:
【中文标题】有没有 Python 的“魔法常数”的综合表?【英文标题】:Is there a comprehensive table of Python's "magic constants"? 【发布时间】:2016-11-15 15:18:53 【问题描述】:__file__
、__main__
等在哪里定义,它们的正式名称是什么? __eq__
和 __ge__
是“魔术方法”,所以现在我只是将它们称为“魔术常量”,但我什至不知道这是否正确。
Google 搜索确实没有找到任何东西,甚至 Python 自己的文档在扫描了各个页面之后似乎也没有完整的列表。
【问题讨论】:
它们不是“魔法常数”,所以不是。有些与进口有关:docs.python.org/3/reference/…。__main__
在这里:docs.python.org/3/library/__main__.html。对象属性在数据模型中:docs.python.org/3/reference/datamodel.html
尝试调用globals()
函数并查看结果。
出于好奇,你为什么要这样一张桌子?想知道那里有什么是好奇吗?您是否想定义自己的定义并担心您可能会与已经存在的事物发生冲突?如果第二种情况,IIRC,all dunder 名称由解释器保留,因此您应该永远定义新名称。有一些使用频率很高,以至于该语言不太可能将它们用于不同的目的(例如__version__
)——尽管它可能...无论如何,你绝对不应该去定义任何新的东西。
@mgilson 纯粹的好奇心和想知道外面有什么的渴望。我喜欢研究一些其他人可能认为多余或无用的东西
【参考方案1】:
简短回答:否。对于更长的答案,它已经严重失控,请继续阅读......
据我所知,没有这些__dunder_names__
的综合表格(也不是他们的正式头衔!)。有几个来源:
唯一真正的“魔常数”是__debug__
:尝试分配给这个名称是SyntaxError
。它被 in the list of constants 覆盖并在 the assert
statement 的上下文中提及。
另一个特定由语句使用的模块级名称是__all__
,它与the import
statement 一起记录。
有两个特殊模块,记录在library reference,它们有自己的页面:
__main__
是执行脚本的***环境。
__future__
用于访问尚未强制执行的语言功能(例如,print_function
用于替换 Python 2 中的 print
语句)。
其余大部分(__name__
、__file__
等)由导入系统添加到模块中,因此在 the import documentation 中列出。
还有很多相关的对象。 the data model documentation 中列出了实现内置行为的基本方法(如您提到的__eq__
和__ge__
)。但是还有很多其他更具体的名称。例如,在the exceptions documentation 中有几个专门与异常相关的,如__cause__
和__traceback__
。
请注意,其中大多数没有什么特别“神奇”的,它们只是常规属性,可以根据需要分配给您。但是,它们被认为是为内部 Python 机器保留的,因此您不应添加自己的;每the language reference on "reserved classes of identifiers":
任何
__*__
名称的使用,在任何情况下,如果不遵循明确记录的使用,可能会在没有警告的情况下被破坏。
也就是说,我认为在官方文档中任何地方实际上并未指定一些常用的方法,例如__author__
和__version__
;参见例如What is the common header format of Python files? 和 What is the origin of __author__? 少数通过PEP-8 获得半官方身份,但仅此而已。
从外观上看,其他一些人已经走过这条路:
Finding a list of all double-underscore variables? I need __closure__ Built-in magic variable names/attributes【讨论】:
here也有一些 @MathiasEttinger true,但它们都包含在数据模型 (__doc__
) 或导入文档中。
因此,既然没有完整的列表,那么至少在某个地方(或者您可能想提供它们)仅提供几个主要列表。作为 python 的新手,拥有某种表格肯定会很好,即使它不完整。还是我注定要玩寻宝游戏?
@Alan “至少在某个地方......只给出了几个主要的” - 你的意思是我在答案中链接到的资源?
@Alan 老实说,我认为大多数这些你会在你需要了解它们时发现。因为规则是不要自己发明任何,所以不会有任何冲突。以上是关于有没有 Python 的“魔法常数”的综合表?的主要内容,如果未能解决你的问题,请参考以下文章