Bob*_*ver 10 python constants python-3.x
在关于内置常量(不包括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哪里变成了一些.
您可以分配给任何不是关键字的有效标识符。有什么特别之处True,False,None是他们两个关键字和标识符。您可以在此问题中了解其原因:
为什么在 Python 3 中 True 和 False 改为关键字
内置命令如NotImplemented或Ellipsis不特殊情况下,也不是int,list,type等。分配给NotImplemented不会改变内置常量。相反,您将名称绑定Ellipsis到当前范围内的不同值。原版Ellipsis没变。
分配给关键字是 SyntaxError。
您可以通过导入keywords模块来查看关键字列表。
>>> import keyword
>>> keyword.kwlist
['False',
'None',
'True',
'and',
'as',
'assert',
'break',
'class',
'continue',
'def',
'del',
'elif',
'else',
'except',
'finally',
'for',
'from',
'global',
'if',
'import',
'in',
'is',
'lambda',
'nonlocal',
'not',
'or',
'pass',
'raise',
'return',
'try',
'while',
'with',
'yield']
Run Code Online (Sandbox Code Playgroud)
有很多内置的标识符不在该列表中,您可以指定新值int,Ellipsis等等。
... 是一种特殊情况,因为它首先不是有效的标识符名称,因此无法分配给。
与许多其他语言相比,Python 的保留关键字列表非常短。一个原因可能是为了保持与出于某种原因使用标识符的代码的向后兼容性,例如Ellipsis在它成为语言的一部分之前。