2010-02-09 81 views
4

我學習蟒蛇。我喜歡用幫助()或interinspect.getargspec得到的殼功能的信息。但無論如何,我可以得到參數/返回類型的函數。獲取類型的參數在python

+0

這有什麼錯了'help'文本?閱讀代碼本身有什麼問題? – 2010-02-09 11:15:37

+0

當然它是錯的。當你只是想調用一個方法時,你真的喜歡閱讀源代碼嗎? – leon 2010-02-12 02:41:58

回答

1

有一個叫type()功能。
Here are the docs

你不能提前告訴什麼類型的函數將返回

>>> import random 
>>> def f(): 
... c=random.choice("IFSN") 
... if c=="I": 
... return 1 
... elif c=="F": 
... return 1.0 
... elif c=="S": 
... return '1' 
... return None 
... 
>>> type(f()) 
<type 'float'> 
>>> type(f()) 
<type 'NoneType'> 
>>> type(f()) 
<type 'float'> 
>>> type(f()) 
<type 'int'> 
>>> type(f()) 
<type 'str'> 
>>> type(f()) 
<type 'float'> 
>>> type(f()) 
<type 'float'> 
>>> type(f()) 
<type 'NoneType'> 
>>> type(f()) 
<type 'str'> 

它通常是很好的做法是隻從一個函數返回一個類型的對象,但是Python並不強制在那你

4

如果你的意思是在函數的某個調用期間,函數本身可以通過調用type來獲得它們的參數類型(並且肯定知道它返回的類型)。

如果從功能外的意思是,沒有:該功能可以與任何類型的參數調用 - 有些這樣的電話會產生錯誤,但沒有辦法事先知道他們將是哪些。

參數可以在Python 3中進行選擇性修飾,這種修飾的一種可能用途是表達有關參數類型(和/或其他約束)的一些信息,但語言和標準庫不提供關於這種裝飾可能會被使用。你不妨採用一種標準,其中這樣的約束在函數的文檔字符串結構化的方式,這將有被適用於任何版本的Python的優勢表達。

1

在3.4.2文檔https://docs.python.org/3/library/inspect.html,有什麼你到底需要(即獲取類型參數的函數)一提。

你首先需要定義你這樣的功能:

def f(a: int, b: float, c: dict, d: list, <and so on depending on number of parameters and their types>): 

然後你可以使用formatargspec(*getfullargspec(f))它返回一個很好的哈希值是這樣的:

(a: int, b: float) 
+0

這個問題是從2010年...在3.4.2之前存在的。我會考慮刪除這個答案。 – rnevius 2014-11-06 12:35:52