在built-in constants的文档中(不包括site
常量),它声明:
注意:无法重新分配名称
None
,False
,True
和__debug__
(对其进行分配,即使是属性名称,也可以SyntaxError
),因此它们可以被认为是“真正的”常数。
如果我没有弄错的话,True
和False
成了" true" Python 3中的内容。(正如副本中所述。)
问题是,为什么不是另外两个(Ellipsis
,NotImplemented
)" true" contants?是否有一个用例重新分配这些(numpy
和Ellipsis
或许?),这使得他们免于此限制?
加剧了我的困惑,在standard library types的文档中,Ellipsis
和NotImplemented
类型在行为上与None
类型相同。即:
此问题与建议的副本无关:Why were True and False changed to keywords in Python 3。它提出了一些完全不同的东西,即为什么Ellipsis
和NotImplemented
不是" true"常量和不为什么True
和False
变为1。
答案 0 :(得分:3)
您可以指定任何非关键字的有效标识符。 True
,False
,None
的特殊之处在于它们是两个关键字和标识符。您可以在此问题中了解相关原因:
Why were True and False changed to keywords in Python 3
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']
此列表中没有很多内置标识符,您可以为int
,Ellipsis
等分配新值。
...
是一种特殊情况,因为它首先不是有效的标识符名称,因此无法分配给它。
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.
}
之类的标识符。