2016-10-31 137 views
2

比方說,我們有一個功能foo(a, b),它是Python模塊的公共API的一部分。
有什麼方法可以查詢該函數期望的ab的類型嗎?
我知道我可以通過inspect模塊獲得參數的數量和它們的默認值,但是有沒有可用的類型信息?有沒有辦法獲得函數參數的類型?

+0

不,默認情況下不是。你應該相信你的程序員,或者儘可能早地在你的函數中失敗。另外,記錄你的公共API。 – jbndlr

+0

用'foo .__ doc__'檢查函數的文檔字符串這應該包含您要查找的信息,但不能保證。問題在於Python不會將變量強制爲某種類型。例如,你可以嘗試將一個字符串傳遞給'sqrt',例如,直到運行時纔會發生錯誤 –

回答

6

Python是一種動態類型語言,所以沒有;一個功能應該是文件而不是他們的期望。

Python 3.5及更高版本的支持optional type hinting;如果庫使用類型提示,則可以使用typing.get_type_hints() function查詢此信息以編程方式訪問該信息。

通常,Python函數應該接受實現預期功能而不是特定類型的對象。如果函數遍歷一個序列來提取字符串,那麼它應該被記錄爲接受(以類型暗示術語)一個對象,而不是一個列表或元組或其他特定類型。

+2

此外,它不是參數的*類型*,而是它的可用/實現*方法*,使它適合作爲一個特定函數的參數,因爲python使用** duck-typing **。 – jbndlr

相關問題