Der einfachste Weg, um eine Funktion
func(*args, **kwargs)
... einzuwickeln ist manuell einen Wrapper zu schreiben, die func() in sich nennen würde:
def wrapper(*args, **kwargs):
# do something before
try:
return func(*a, **kwargs)
finally:
# do something after
In Funktion ist ein Python Objekt, so dass Sie den Namen als Argument einer anderen Funktion übergeben und zurückgeben können. Sie können auch einen Wrapper-Generator für jede Funktion anyFunc() schreiben:
def wrapperGenerator(anyFunc, *args, **kwargs):
def wrapper(*args, **kwargs):
try:
# do something before
return anyFunc(*args, **kwargs)
finally:
#do something after
return wrapper
Bitte beachten Sie auch in Python beachten Sie, dass, wenn Sie nicht wissen, oder wollen nicht alle Argumente einer Funktion zu nennen, Sie beziehen sich auf ein Tupel von Argumenten, die mit seinem Namen bezeichnet wird, durch ein Sternchen in Klammern nach dem Funktionsnamen vorangestellt:
*args
zum Beispiel können Sie eine Funktion definieren, die eine beliebige Anzahl von Argumenten entgegennehmen würde:
def testFunc(*args):
print args # prints the tuple of arguments
Python bietet noch weitere Manipulationen an Funktionsargumenten. Sie können einer Funktion erlauben, Schlüsselwortargumente zu übernehmen. Innerhalb des Funktionskörpers werden die Schlüsselwortargumente in einem Wörterbuch gehalten. In den Klammern nach dem Funktionsnamen ist dieser Wörterbuch mit zwei Sternchen, gefolgt vom Namen des Wörterbuchs bezeichnet:
**kwargs
Ein ähnliches Beispiel, die das Schlüsselwort Argument Wörterbuch druckt:
def testFunc(**kwargs):
print kwargs # prints the dictionary of keyword arguments
Eine Sache, die ich nicht oft erwähnt habe, ist, wie man eine Funktion mit * args aufruft, wenn Sie eine Liste oder ein Tupel haben, die Sie übergeben wollen. Dafür muss man es so nennen: wrapper1 (func2, * mylist) – pug
* args in 'def wrapper (func, * args)' ist 'method (params object [] args)' ist in C#. –
Beachten Sie, dass '* args' das letzte Argument in der Funktionsdefinition sein muss. –