2012-06-04 66 views
1

我知道Python是動態類型的,鴨子類型也很強大。在某些情況下,我們必須確保它是事先聲明爲列表或字典以便使用它們......所以我可以說Python也是靜態類型語言嗎?Python靜態類型?

+0

在遇到Python之前,您有沒有可能學習非嚴格的Perl? –

回答

8

不,Python不是靜態類型的。

在靜態類型名稱綁定到一個類型和一個對象(或值),在Python名稱只綁定到對象。在任何時候,您都可以將名稱重新分配給不同類型的對象,而這在靜態類型語言中是無法做到的。

我不知道你需要事先聲明你的變量是什麼意思,但我的猜測是你實際上只是創建一個空的列表或字典並將其分配給一個名稱。

0

考慮這行代碼:

x = [] # (or {}) 

你是不是「變量聲明爲一個表(或字典)」使用它之前。您正在創建一個清單([])(或字典{}),然後將其分配爲變量的值(x)。這並不意味着x現在有一個類型。你可以一個字符串後分配到x

x = 'a string' 

和Python會與這個沒有問題。

我不知道你是否被另一種語言的特性弄糊塗了,比如Perl的autovivification特性,它讓你把一個未初始化的標量變量看作是對列表或哈希的引用。你是否認爲Python不太「動態」,因爲它缺乏這樣的功能?如果您確實在尋找這樣的東西,請查看collections模塊中的defaultdict類。