在文檔上built-in constants(不含site
常數),它指出:爲什麼6個內置常量中的2個是可分配的?
Note: The names
None
,False
,True
and__debug__
cannot be reassigned (assignments to them, even as an attribute name, raiseSyntaxError
), so they can be considered 「true」 constants.
如果我沒有記錯,True
和False
在Python 3就成了「真」 contants(如重複的也有描述。 )
問題是,爲什麼不是另外兩個(Ellipsis
,NotImplemented
)「真正的」contants?是否有用於重新分配這些(numpy
與Ellipsis
也許?)的用例已經免除了它們的限制?
加重我的困惑,在standard library types的文檔中,Ellipsis
和NotImplemented
類型在行爲上與None
類型相同。即:
- 他們是單身
- 它們不支持特殊操作。
這個問題是不相關的建議重複:Why were True and False changed to keywords in Python 3。它要求完全不同的東西,即爲什麼Ellipsis
和NotImplemented
不是「真」常量和而不是爲什麼True
和False
其中變成了1。
所以這裏是我的觀點:肯定沒有用於覆蓋任何**內建對象的用例。任何此類代碼應被視爲危險。另一方面,使它們成爲所有關鍵詞將會使它難以維護(在C端)。所以我想它是Python演變的一個問題。此外,「無」,「假」和「真」被一直使用,所以特別關注它們。 – freakish
有趣的是,'Ellipsis = 2'沒有問題,但'... = 2'提高'SyntaxError:不能分配到省略號'。 –
@freakish這是一個意見。當然,Python只是簡單地喜歡(特別是在簡化了向Python 3過渡的事情之後),我看不出如何維護其他兩個名稱的額外複雜性會如何影響行爲相同的內容的一致性。這就是爲什麼我認爲必須有一些用例。 –