Daha önce kabul edilen cevap şu tarihten beri kullanımdan kaldırıldı :Python 3.0 . Kullanmak yerine inspect.getargspecşimdiSignature onun yerini sınıfı .
Fonksiyon için bir imza oluşturma yoluyla kolaydır signaturefonksiyonu :
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
Şimdi, parametrelerini hızlı bir şekilde görüntüleyerek görüntüleyebilirsiniz str:
str(sig) # returns: '(self, arg1, kwarg1=None)'
veya öznitelik adlarının parametre nesneleriyle eşleştirilmesini de sağlayabilirsiniz sig.parameters.
params = sig.parameters
print(params['kwarg1']) # prints: kwarg1=20
Ayrıca, çağırabilir lenüzerinde sig.parametersde bu işlev gerektirir argümanların sayısını görmek için:
print(len(params)) # 3
Haritadaki her bir giriş paramsaslında hayatınızı kolaylaştıran başka özelliklere sahip bir Parameternesnedir . Örneğin, bir parametrenin yakalanması ve varsayılan değerinin görüntülenmesi artık aşağıdakilerle kolayca gerçekleştirilebilir:
kwarg1 = params['kwarg1']
kwarg1.default # returns: None
benzer şekilde içerdiği nesnelerin geri kalanı için parameters.
Python gelince 2.xatan kullanıcılar, inspect.getargspec değil kaldırılan, dil yakında :-) olacaktır. SignatureSınıf mevcut değildir 2.xserisi ve olmayacaktır. Yani hala çalışman gerekiyor inspect.getargspec.
Eğer kodunuz varsa Python 2 ve 3 arasında geçiş gelince, arayüzünde dayanmasıdır getargspecPython 2'de ve geçiş signaturede 3çok zordur, değerli seçeneği var kullanmanın inspect.getfullargspec. Ayrıca, bir getargspecişlevin bağımsız değişkenlerini yakalamak ve ayrıca aşağıdakileri getargspecyapmayan bazı ek durumları ele almak için (tek bir çağrılabilir bağımsız değişken) ile benzer bir arabirim sunar :
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
Gibi getargspec, getfullargspecbir döner NamedTupleparametreleri içeren.
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
inspectstandart kütüphane modülü için herhangi bir gerekçe olmazdı .