2015-10-09 48 views
5

在一些(主要是功能性的)語言,你可以做這樣的事情:你如何在python中使用別名?

type row = list(datum) 

type row = [datum] 

因此,我們可以建立這樣的事情:

type row = [datum] 
type table = [row] 
type database = [table] 

是否有在Python中做到這一點?你可以用類來實現,但是python有很多功能方面的問題,所以我想知道它是否可以用更簡單的方法來完成。

回答

2

Python是動態類型的。雖然ŁukaszR.的答案對於類型暗示目的是正確的(它可以反過來用於靜態分析和短缺),但嚴格來說,你不需要來做任何事情來完成這項工作。只是構建你列出這樣並將其分配給變量:

foo_table = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
bar_table = ... 
foo_database = [foo_table, bar_table, ...] 

類型提示是真正有用的,因爲他們可以幫助文檔代碼的行爲,他們既可以靜態地和在運行時進行檢查。但如果不方便,強制沒有這樣做。

9

由於Python 3.5可以使用typing模塊。

引用文檔, 類型別名通過指定類型的別名定義:

Vector = List[float] 

要了解更多有關強制執行的Python類型,你可能要熟悉政治公衆人物:PEP483PEP484

Python歷史上使用鴨式打字而不是強類型打字,並且沒有在3.5版本之前實施類型的內置方式。

+0

這正是我一直在尋找的,謝謝! – Wysaard

+1

請注意,類型提示旨在用於靜態分析和供棉絨使用。類型提示不用於運行時類型檢查。它們也不用於優化。還要注意,類型提示還處於初期階段。 Python中幾乎沒有代碼提供了類型提示,並且沒有開發任何分析工具來處理它們(據我所知)。 –

+0

從PEP484的[非目標部分](https://www.python.org/dev/peps/pep-0484/#non-goals):「雖然建議的打字模塊將包含運行時類型的一些構建塊檢查 - 特別是get_type_hints()函數 - 必須開發第三方軟件包以實現特定的運行時類型檢查功能,例如使用裝飾器或元類。使用性能優化的類型提示作爲讀者的練習。 「 –

0

怎麼樣像row = lambda datum: list(datum)?在那裏沒有真正的類型自省支持,但是鑑於Python對鴨子打字的喜愛,它是一種非常簡單的「別名」類型。它功能強大!均田。

+0

如果你真的想要做這種事情,只需使用'row = list'。沒有必要使事情複雜化。 – Kevin

+0

@Kevin適用於'row',是的,但不適用於'table'或'database'。 – JAB

+0

真的嗎? 'table()'的簽名是什麼?它與'list()'有什麼不同? – Kevin