在有关built-in constants的文档中(不包括site常量),声明:



如果我没记错的话,TrueFalse在Python 3中成为“真正的”竞争者。

问题是,为什么其他两个(EllipsisNotImplemented)不是“true”竞争者?是否有重新分配这些用例的用例(也许是numpyEllipsis?),使它们不受此限制?

令我感到困惑的是,在standard library types的文档中,EllipsisNotImplemented类型在行为上都与None类型相同。即:

  • 他们是单例
  • 他们不支持特殊操作。


  • 该问题与建议的重复项Why were True and False changed to keywords in Python 3不相关。它提出了完全不同的问题,即为什么EllipsisNotImplemented不是“true”常量,而不是为什么TrueFalse变成了常量。

    最佳答案

    您可以分配给任何非关键字的有效标识符。 TrueFalseNone的特殊之处在于它们既是关键字又是标识符。您可以在以下问题中了解有关其原因的信息:

    Why were True and False changed to keywords in Python 3

    诸如NotImplementedEllipsis之类的内建函数不是特殊情况,intlisttype等也不是特殊情况。分配给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']
    

    此列表中没有很多内置标识符,您可以将新值分配给intEllipsis等。
    ...是一种特殊情况,因为它首先不是有效的标识符名称,所以将不可能分配给它。

    与许多其他语言相比,Python使保留关键字的列表很短。原因之一可能是保持与代码的向后兼容性,由于某种原因,该代码在成为语言的一部分之前就使用了诸如Ellipsis之类的标识符。

    10-04 21:16