2013-02-20 35 views
1

雖然TrueFalsebuiltin constants,下面是允許在Python。爲什麼python允許覆蓋內建常量?

>>> True = False 
>>> a = True 
>>> b = False 
>>> print a,b 
False False 

爲什麼允許這麼做?

編輯:這隻發生在Python 2.x(所有指出)。

+2

這是不在Python 3.X – mgilson 2013-02-20 12:08:46

+3

有了巨大的力量,內容非常重要 – pcalcao 2013-02-20 12:15:11

+0

這是屬於大家的理念可以改變一切。我認爲它源於Python的腳本特性,在小程序中給予最大的靈活性。這並不擴展那麼好,例如語言「E」 http://en.wikipedia.org/wiki/E_%28programming_language%29 – User 2013-02-20 16:34:36

回答

4

請記住,這隻發生在Python 3之前的Python版本。這是Python的哲學的一部分,即一切都應該是動態的。

事實上在Python 2 True不是關鍵字。它是一個參考結合bool對象。你可以嘗試在你的Python 2.x的VM:

>>> type(True) 
<type 'bool'> 

在Python 3它更改爲關鍵字,並試圖重新綁定在一個異常的參考結果:

>>> True = [] 
    File "<stdin>", line 1 
SyntaxError: assignment to keyword 
9

我認爲,"We're all consenting adults here"蟒蛇意識形態在這裏也適用。 Python沒有私有類成員,因爲沒有真正的好理由來阻止用戶搞砸某些東西......如果他們去了解他們不明白的東西,那麼當代碼破壞時他們會得到他們應得的東西。同樣的事情會與重新分配內建的能力...

list = tuple 

需要注意的是,你問在Python 3.x中被明令禁止的,但如果你仍然可以分配給內建...

>>> True = False 
    File "<stdin>", line 1 
SyntaxError: assignment to keyword 
>>> list = tuple 
+2

+1的「我們在這裏的所有成年人自願」 – dmg 2013-02-20 12:13:38

+1

+1爲鏈接 – mike 2013-02-20 13:45:07

1

傳統上,Python的設計使用的語法必須儘可能少的關鍵字;在py3K之前,True和False不被視爲必要的關鍵字。除非Guido在關閉前遇到這個問題,否則您可能得不到一個好的答案。 (但this thread說明了爲什麼它沒有更改)

+0

+1的線程 – mike 2013-02-20 13:42:39