Ich versuche, einen Dekorator zu definieren, der der verzierten Funktion f
nur ein Schlüsselwortargument hinzufügt. f
kann eine beliebige Kombination von Parametern (Position, Schlüsselwort usw.) enthalten. Ich versuchte dies:Decorator, der einen Schlüsselwortparameter hinzufügt
def capture_wrap(f):
def captured(name=False, *args, **kwargs):
"""name can be False, True or str. if str, then use it as a name."""
print (name, f, args, kwargs)
inner = f(*args, **kwargs)
if name is False:
return inner
elif name is True:
return capture(inner)
else:
return capture(inner, name=name)
return captured
Wenn ich versuche es mit einer Funktion zu verwenden, die ein einzelnes Argument akzeptiert:
@capture_wrap
def any_of(s):
"""s must be in the right format.
See https://docs.python.org/3/library/re.html#regular-expression-syntax ."""
return wrap('[', Dinant(s, escape=False), ']')
0-9A-Fa-f <function any_of at 0x7fb370548a60>() {}
Traceback (most recent call last):
File "./dinant.py", line 222, in <module>
hex = one_or_more(any_of('0-9A-Fa-f'))
File "./dinant.py", line 116, in captured
inner = f(*args, **kwargs)
TypeError: any_of() missing 1 required positional argument: 's'
Ich erhalte eine Fehlermeldung, weil das ein Argument der name
Parameter werden in captured()
. Wie soll ich das richtig machen?
Können Sie uns erklären, was "capture()" ist und was Sie wirklich erreichen wollen (=> das Problem Sie versuchen, mit diesem zu lösen - aktuell funktioniert nicht - Lösung)? –
Können Sie bitte klarstellen, was Sie in s übergeben und warum brauchen Sie es? Dies wird helfen, eine klarere Antwort geben –