在关于内置常量(不包括site常量)的文档中,它声明:
注:名称
None,False,True并且__debug__不能被重新分配(分配给他们,甚至作为一个属性名称,提高SyntaxError),因此它们可以被认为是"真正的"常数.
如果我没有弄错,True并False在Python 3中成为"真正的"内容.(正如副本中所述.)
问题是,为什么不是另外两个(Ellipsis,NotImplemented)"真实"的含量?是否有一个用例重新分配这些(numpy带Ellipsis吧?)已经从这种限制豁免呢?
加剧了我的困惑,在标准库类型的文档中,行为Ellipsis和NotImplemented行为都与类型相同None.即:
此问题与建议的副本无关:为什么在Python 3中将True和False更改为关键字.它提出了一些完全不同的东西,即为什么Ellipsis和NotImplemented 不是"真正的"常数,而不是为什么True和False哪里变成了一些.
参考手册中明确记录了这一点:
\n\n\n非空 _ slot _ 不适用于从 \xe2\x80\x9cvariable-length\xe2\x80\x9d 内置类型(例如 int、bytes 和 tuple)派生的类。
\n
情况确实如此,写道:
\nclass MyInt(int):\n __slots__ = 'spam',\nRun Code Online (Sandbox Code Playgroud)\n结果是:
\nTypeError: nonempty __slots__ not supported for subtype of 'int'\nRun Code Online (Sandbox Code Playgroud)\n这是为什么呢?为什么空槽可以使用但非空槽禁止使用?
\n__debug__是一个内置常量,根据常量文档,它似乎不是一个实现细节.
尝试分配给它时(文档状态不支持),将显示以下错误消息:
>>> __debug__ = False
File "<stdin>", line 1
SyntaxError: assignment to keyword
Run Code Online (Sandbox Code Playgroud)
显然,根据消息,它是一个关键字,但是:
>>> from keyword import kwlist
>>> '__debug__' in kwlist
False
Run Code Online (Sandbox Code Playgroud)
这似乎很奇怪.None,True并且False,也列为常量,包含在kwlist.
为什么不在__debug__关键字列表中?
使用numpy作为一个例子,我似乎无法实现什么做这样一个进口的好处将做到:
import numpy.lib
Run Code Online (Sandbox Code Playgroud)
导入完成后,numpy可以作为名称使用,相当于直接导入它:
import numpy
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,您lib只能使用虚线访问来访问子模块:
>>> numpy.lib
<module 'numpy.lib' from ....>
Run Code Online (Sandbox Code Playgroud)
是否存在做import numpy.lib有益的情况?