2010-10-12 41 views
7

Olası Çoğalt:
How to find out the arity of a method in PythonPython işlevinin bağımsız değişkenleri uzunluğu?

Ben bir işlevi ilan ettiler Örneğin

:

Ben "toplamı" fonksiyonunun argümanları uzunluğunu almak istiyorum
def sum(a,b,c): 
    return a + b + c 

.
somethig bunu beğendi: some_function (toplam) döndürüldü 3
Python'da nasıl yapılabilir?

Güncelleme: Ben bir parametre ve bunu geçmek argümanlar olarak başka bir işlevi kabul eden bir işlevi yazmak istiyorum çünkü
Bu soruyu sordum.

def funct(anotherFunct, **args): 

ve ben doğrulamak gerekir:

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

Kaynak kodunu görebilirsiniz, değil mi? Açıkçası 3. Bilmen gereken daha ne var? –

+1

niçin '* args'ı geçmeyi deniyorsunuz ve' return len (args) 'veya' return len (filter (None, args)) 'i döndürmeyin! – shahjapan

+0

çünkü başka bir işlevi parametre ve argümanlar iletmek için kabul eden bir işlev yazmak istiyorum. def işlevi (anotherFunct, ** args): ve doğrulamak gerekiyor: if (len (args)! = anotherFuct.func_code.co_argcount): return "error" – Zango

cevap

5

Yöntem adınız sum ise, sum.func_code.co_argcount size argüman sayısı verecektir.

+0

Bu yöntemde ne gibi olumsuzluklar var? Diğer cevaplar göz önüne alındığında, 'teftiş'i kullanmayı tercih ederim. Bu neden? – Annan

2
import inspect 

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

inspect modül arkadaşınız olduğu; Özellikle inspect.getargspec bir işlevin argümanlar hakkında bilgi veren:

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

argspec da durumda yok isteğe bağlı argümanlar ve anahtar kelime argümanlar, ayrıntılarını içerir, ancak bu konuda bilerek değer:

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