Angenommen, ich habe eine Dekorateurfabrik. Es ist ziemlich nutzlos, nur die Argumente Akkumulieren und Addieren der Ergebnisse, sondern nur für ein Beispiel:Warum wird bei der Verwendung von Decorator Factory Factory ein Syntaxfehler angezeigt?
def decorator_factory_factory(a):
def decorator_factory(b):
def decorator(f):
def decorated(*args, **kwargs):
return f(*args, **kwargs) + a + b
return decorated
return decorator
return decorator_factory
Und ich versuche es so zu verwenden:
@decorator_factory_factory(3)(1)
def should_return_5():
return 1
ich einen Syntax bekommen. Sicherlich sollte es jeden beliebigen Python-Ausdruck als Dekorator zulassen?
ich auch versucht:
@(decorator_factory_factory(3)(1))
def should_not_be_touched():
return 1
aber dies war eine weitere Syntax.
Mache ich etwas falsch? Die einzige Art, wie ich um diese gefunden haben, ist:
_decorator_factory = decorator_factory_factory(3)
@_decorator_factory(1)
def should_not_be_touched():
return 1
del _decorator_factory
Aber dies erfordert eine zusätzliche Variable, die
Welche Version genannt von Python benutzt du @Artyer? –
@ChristianDean passiert auf 3.6.1 und 2.7.13 unter Windows und die Standard-Python2 und 3 auf Ubuntu. – Artyer
@Ayter Interessant. Ich fragte, weil, weil anscheinend der Autor von [dieser] (http://concisionandconcinnity.blogspot.com/2010/09/decorator-factories-and-decorator.html) Artikel die Dekoratorfabrik-Fabriksyntax verwenden könnte. Ich dachte, er hätte Python 2.7 benutzt, wo die Syntax funktionierte, aber es scheiterte an dieser Version. Ich werde das mit Python v2.6 überprüfen. –