J'essaie de définir un décorateur qui ajoute simplement un argument mot-clé à la fonction décorée f
. f
peut avoir n'importe quelle combinaison de paramètres (positionnel, mot-clé, etc.). J'ai essayé ceci:Décorateur qui ajoute un paramètre de mot-clé
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
Si je tente de l'utiliser avec une fonction qui accepte un seul argument:
@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'
je reçois une erreur parce que le tout argument devient le paramètre name
dans captured()
. Comment dois-je le faire correctement?
Pouvez-vous expliquer ce que « la capture() » est et ce que vous êtes vraiment essayer d'atteindre (=> le problème que vous essayez de résoudre ce - actuellement ne fonctionne pas - solution)? –
Pouvez-vous s'il vous plaît effacer ce que vous passez en s et pourquoi avez-vous besoin? Cela aidera à donner une réponse plus claire. –