2010-10-12 79 views
7

可能重複:
How to find out the arity of a method in PythonPython函數參數的長度?

例如,我已經聲明瞭一個函數:

def sum(a,b,c): 
    return a + b + c 

我想要得到的 「求和」 函數的參數長度。
somethig是這樣的:some_function(sum)返回3
它如何在Python中完成?

更新:
因爲我想寫接受另一個函數作爲參數和參數傳遞給它的功能我問這個問題。

def funct(anotherFunct, **args): 

,我需要驗證:

if(len(args) != anotherFuct.func_code.co_argcount): 
    return "error" 
+0

你可以看到源代碼,對不對?這顯然是3.你還需要知道什麼? – 2010-10-12 11:18:14

+1

爲什麼不嘗試傳遞'* args'並返回'return len(args)'或'return len(filter(None,args))'!!! – shahjapan 2010-10-12 11:36:35

+0

,因爲我想寫一個接受另一個函數作爲參數和參數傳遞它的函數。 def function(anotherFunct,** args):我需要驗證:if(len(args)!= anotherFuct.func_code.co_argcount):return「error」 – Zango 2010-10-12 13:22:51

回答

5

如果您的方法名稱是sum,那麼sum.func_code.co_argcount會爲您提供參數數量。

+0

使用這種方法有什麼缺點?鑑於其他答案,我假設使用「檢查」是首選方法。爲什麼是這樣? – Annan 2016-09-16 20:42:57

2
import inspect 

print len(inspect.getargspec(sum)[0]) 
13

inspect模塊是你的朋友;具體inspect.getargspec這給你一個函數的參數信息:

>>> def sum(a,b,c): 
...  return a + b + c 
... 
>>> import inspect 
>>> argspec = inspect.getargspec(sum) 
>>> print len(argspec.args) 
3 

argspec還包含可選的參數和關鍵字參數,而你的情況你沒有細節,但它是值得了解:

>>> print argspec 
ArgSpec(args=['a', 'b', 'c'], varargs=None, keywords=None, defaults=None)