为什么6个内置常量中的2个可分配?

时间:2017-07-07 13:03:01

标签: python python-3.x constants

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

  

注意:无法重新分配名称NoneFalseTrue__debug__(对其进行分配,即使是属性名称,也可以SyntaxError ),因此它们可以被认为是“真正的”常数。

如果我没有弄错的话,TrueFalse成了" true" Python 3中的内容。(正如副本中所述。)

问题是,为什么不是另外两个(EllipsisNotImplemented)" true" contants?是否有一个用例重新分配这些(numpyEllipsis或许?),这使得他们免于此限制?

加剧了我的困惑,在standard library types的文档中,EllipsisNotImplemented类型在行为上与None类型相同。即:

  • 他们是单身人士
  • 他们不支持特殊行动。

此问题与建议的副本无关:Why were True and False changed to keywords in Python 3。它提出了一些完全不同的东西,即为什么EllipsisNotImplemented 不是" true"常量为什么TrueFalse变为1。

1 个答案:

答案 0 :(得分:3)

您可以指定任何非关键字的有效标识符。 TrueFalseNone的特殊之处在于它们是两个关键字和标识符。您可以在此问题中了解相关原因:

Why were True and False changed to keywords in Python 3

NotImplementedEllipsis等内置词不是特殊情况,intlisttype等都不是。分配给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']

此列表中没有很多内置标识符,您可以为intEllipsis等分配新值。

...是一种特殊情况,因为它首先不是有效的标识符名称,因此无法分配给它。

与许多其他语言相比,Python保留了保留关键字列表。一个原因可能是保持与代码的向后兼容性,这些代码由于某种原因在Ellipsis成为语言的一部分之前使用了@Override public void decorate(DayView dayView) { SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy",Locale.getDefault()); try{ if(dayView.getDate().equals(dateFormat.parse(huablauf.getText().toString()))){ int color = Color.parseColor("#f9acb8"); dayView.setBackgroundColor(color); } } catch (Exception e){ //Handle exception. } 之类的标识符。