在有关built-in constants的文档中(不包括site
常量),声明:
如果我没记错的话,True
和False
在Python 3中成为“真正的”竞争者。
问题是,为什么其他两个(Ellipsis
,NotImplemented
)不是“true”竞争者?是否有重新分配这些用例的用例(也许是numpy
和Ellipsis
?),使它们不受此限制?
令我感到困惑的是,在standard library types的文档中,Ellipsis
和NotImplemented
类型在行为上都与None
类型相同。即:
该问题与建议的重复项Why were True and False changed to keywords in Python 3不相关。它提出了完全不同的问题,即为什么
Ellipsis
和NotImplemented
不是“true”常量,而不是为什么True
和False
变成了常量。 最佳答案
您可以分配给任何非关键字的有效标识符。 True
,False
和None
的特殊之处在于它们既是关键字又是标识符。您可以在以下问题中了解有关其原因的信息:
Why were True and False changed to keywords in Python 3
诸如NotImplemented
或Ellipsis
之类的内建函数不是特殊情况,int
,list
,type
等也不是特殊情况。分配给NotImplemented
不会更改内置常量。而是将名称Ellipsis
绑定(bind)到当前作用域中的其他值。原始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']
此列表中没有很多内置标识符,您可以将新值分配给
int
,Ellipsis
等。...
是一种特殊情况,因为它首先不是有效的标识符名称,所以将不可能分配给它。与许多其他语言相比,Python使保留关键字的列表很短。原因之一可能是保持与代码的向后兼容性,由于某种原因,该代码在成为语言的一部分之前就使用了诸如
Ellipsis
之类的标识符。