2014-03-27 118 views
-1

我很好奇爲什麼像int,dict和str這樣的內置數據類型不是關鍵字。例如,我可以使用int作爲變量並將其分配給str。然後當int對象被評估時,它的行爲就像str。只有在Python 3中,布爾變成了關鍵字。爲什麼數據類型不像int中的int關鍵字?

當我告訴我的導師說內置數據類型不是關鍵字時,她說這是可怕的形式,我們應該假設它們是關鍵字。它僅僅是Python的怪癖嗎?

任何人都可以對此有所瞭解嗎?

編輯:鑑於我不能添加評論,讓我更具體一點,我的意思是'關鍵字'。我的意思是關鍵字.kwlist中的標識符。我發佈後,我發現Why were True and False changed to keywords in Python 3這給出了一些原因,爲什麼真和假現在是關鍵字。感謝我的問題的答案。

+0

他們爲什麼要成爲關鍵字? –

+0

我認爲你的教師的意圖是教你避免在你的代碼中嵌入陰影。 –

+0

python中沒有關鍵字,只是聲明。 'int'不是一個聲明,它是一個名稱(設計)被默認綁定到int類型。所有名字都可以反彈到其他對象。 –

回答

0

我想這是因爲python是動態類型的,所以它不需要爲每個不同類型保留關鍵字。

1

Python是動態類型強類型,這意味着你不需要申報類型 - 當您綁定對象的名字,他們被扣除。但是類型總是被保留下來,直到你將不同類型的新對象重新綁定到名稱('變量')之後纔會更改。

你所說的'關鍵字'只是內置的實用函數,它返回一個對象,所以int()返回默認整數('0'),str()返回空字符串。因此,如果你打電話給myvar = int(),你的python首先創建一個新的整數對象,然後綁定這個對象來命名myvar在當前的名字範圍內。稍後,如果您致電print myvar,它將檢查名稱myvar的當前範圍,並將此名稱引用的對象傳遞給print

現在,如果您由於某種原因想要使用名稱'int'創建一個變量,比如說int = str,Python允許這樣做。但這並不意味着你改名爲int的引用(順便說一下,Python不允許修改內置類型),你只是將你在程序中使用的名稱重新綁定到其他對象。因此,如果您稍後調用othervar = int(),則會創建綁定到othervar的新空字符串,但這隻會在當前範圍內,因爲它們具有自己的名稱綁定,所以不會更改其他模塊如何使用int()。下面

看代碼,看看它是如何工作的:

def int_fn(): 
    return int() 

def float_fn(): 
    int = float 
    return int() 

現在來看看什麼是返回:

In [26]: int() 
Out[26]: 0 

In [27]: float() 
Out[27]: 0.0 

In [28]: int_fn() 
Out[28]: 0 

In [29]: float_fn() 
Out[29]: 0.0 

現在關於你的老師說的話。 int()str()確實不是關鍵字,上面的示例顯示它們是任何其他名稱。但是,除非你真的,真的知道自己在做什麼以及你的行爲會產生什麼後果(並且可能很難學習),否則你應該把它們當作'保留字'來對待。

相關問題