在关于内置常量(不包括site
常量(的文档中指出:
注意:名称
None
、False
、True
和__debug__
不能重新赋值(赋值,即使作为属性名称,也会引发SyntaxError
(,因此它们可以被视为"真"常量。
如果我没记错的话,True
和False
在 Python 3 中成为了"真正的"同量。(如副本中所述。
问题是,为什么其他两个(Ellipsis
,NotImplemented
(不是"真正的"连续体?是否有重新分配这些(也许是Ellipsis
numpy
?(的用例使它们免于此限制?
更让我困惑的是,在标准库类型的文档中,Ellipsis
和NotImplemented
类型在行为上都与None
类型相同。即:
- 他们是单例
- 他们不支持特殊操作。
这个问题与提议的重复无关:为什么在Python 3中将True和False更改为关键字。它问的是完全不同的问题,即为什么Ellipsis
和NotImplemented
不是"真"常数,而不是为什么True
和False
变成了常数。
您可以分配给任何不是关键字的有效标识符。True
、False
None
的特别之处在于它们既是关键字又是标识符。您可以在此问题中阅读有关其原因的信息:
为什么 True 和 False 在 Python 3 中被更改为关键字
诸如NotImplemented
或Ellipsis
之类的内置不是特例,int
、list
、type
等也不是特例。分配给NotImplemented
不会更改内置常量。而是将名称Ellipsis
绑定到当前作用域中的其他值。原始Ellipsis
不会更改。
分配给关键字是一个语法错误。
您可以通过导入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']
此列表中有很多内置标识符,您可以为int
、Ellipsis
等分配新值。
...
是一种特殊情况,因为它首先不是有效的标识符名称,因此无法分配。
与许多其他语言相比,Python 保留关键字的列表非常短。一个原因可能是保持与代码的向后兼容性,这些代码由于某种原因在成为语言的一部分之前使用了标识符,例如Ellipsis
。