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 signature
fonksiyonu :
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.parameters
de bu işlev gerektirir argümanların sayısını görmek için:
print(len(params)) # 3
Haritadaki her bir giriş params
aslında hayatınızı kolaylaştıran başka özelliklere sahip bir Parameter
nesnedir . Ö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.x
atan kullanıcılar, inspect.getargspec
değil kaldırılan, dil yakında :-) olacaktır. Signature
Sınıf mevcut değildir 2.x
serisi 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 getargspec
Python 2'de ve geçiş signature
de 3
çok zordur, değerli seçeneği var kullanmanın inspect.getfullargspec
. Ayrıca, bir getargspec
işlevin bağımsız değişkenlerini yakalamak ve ayrıca aşağıdakileri getargspec
yapmayan 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
, getfullargspec
bir döner NamedTuple
parametreleri içeren.
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
inspect
standart kütüphane modülü için herhangi bir gerekçe olmazdı .