Hat die Python-Standardbibliothek eine Verknüpfung zum Schreiben von Dekoratoren, die Argumente akzeptieren?Python: Verknüpfung zum Schreiben von Dekoratoren, die Argumente akzeptieren?
Zum Beispiel, wenn ich einen Dekorateur wie with_timeout(timeout)
schreiben will:
@with_timeout(10.0)
def cook_eggs(eggs):
while not eggs.are_done():
eggs.cook()
Ich habe zu schreiben, so etwas wie:
def with_timeout(timeout):
_func = [None]
def with_timeout_helper(*args, **kwargs):
with Timeout(timeout):
return _func[0](*args, **kwargs)
def with_timeout_return(f):
return functools.wraps(f)(with_timeout_helper)
return with_timeout_return
Aber das ist schrecklich ausführlich. Gibt es eine Abkürzung, die Dekoratoren, die Argumente akzeptieren, leichter schreiben lässt?
Hinweis: Ich weiß, dass es auch möglich ist, drei verschachtelte Funktionen zu verwenden, Dekorateure mit Argumenten zu implementieren ... Aber das fühlt sich einfach ein bisschen zu suboptimal.
Zum Beispiel, vielleicht so etwas wie eine @decorator_with_arguments
Funktion:
@decorator_with_arguments
def timeout(f, timeout):
@functools.wraps(f)
def timeout_helper(*args, **kwargs):
with Timeout(timeout):
return f(*args, **kwargs)
return timeout_helper
Wenn Sie mehr Hilfe benötigen Dekoratoren und Anmerkungen finden Sie in meinem Blog hier. http://blog.mattalcock.com/2013/1/5/decorates-and-annotations/ –