Najprostszy sposób na zawijanie funkcji
func(*args, **kwargs)
... polega na ręcznym napisaniu opakowania, które wywoływałoby func () wewnątrz siebie:
def wrapper(*args, **kwargs):
# do something before
try:
return func(*a, **kwargs)
finally:
# do something after
W Pythonie funkcja jest obiektem, więc możesz przekazać jej nazwę jako argument innej funkcji i zwrócić ją. Możesz także napisać generator opakowania dla dowolnej funkcji anyFunc () :
def wrapperGenerator(anyFunc, *args, **kwargs):
def wrapper(*args, **kwargs):
try:
# do something before
return anyFunc(*args, **kwargs)
finally:
#do something after
return wrapper
Zwróć również uwagę, że w Pythonie, gdy nie znasz lub nie chcesz nazywać wszystkich argumentów funkcji, możesz odwołać się do krotki argumentów, która jest oznaczona nazwą, poprzedzoną gwiazdką w nawiasach po nazwa funkcji:
*args
Na przykład możesz zdefiniować funkcję, która pobierze dowolną liczbę argumentów:
def testFunc(*args):
print args # prints the tuple of arguments
Python umożliwia jeszcze dalsze manipulowanie argumentami funkcji. Możesz zezwolić funkcji na przyjmowanie argumentów słów kluczowych. W treści funkcji argumenty słów kluczowych są przechowywane w słowniku. W nawiasach po nazwie funkcji słownik ten jest oznaczony dwiema gwiazdkami, po których następuje nazwa słownika:
**kwargs
Podobny przykład, który wyświetla słownik argumentów słów kluczowych:
def testFunc(**kwargs):
print kwargs # prints the dictionary of keyword arguments