Ich suche nach einer Möglichkeit, eine beliebige Python-Funktion zu dekorieren, so dass eine alternative Funktion anstelle des Originals mit allen Parametern als Liste oder Diktat übergeben wird.Wie Python-Funktion zu ersetzen, während alle übergebenen Parameter unterstützt
Genauer gesagt, so etwas wie dieses (wobei f eine beliebige Funktion ist, und replacement_f nimmt eine Liste und eine dict):
def replace_func(f, replacement_f):
def new_f(*args, **kwargs):
replacement_f(args, kwargs)
return new_f
Allerdings kann ich nicht replacement_f
innerhalb new_f
verweisen. Und ich kann nicht den Standardtrick verwenden, replacement_f
zu new_f
als Standard für einen anderen Parameter zu übergeben, weil ich die variablen Argumentlisten *args
und **kwargs
verwende.
Die Position, an der die ursprüngliche Funktion aufgerufen wird, kann sich nicht ändern und akzeptiert sowohl positionale als auch benannte Parameter.
Ich fürchte, das ist nicht sehr klar, aber ich bin froh, wenn nötig zu klären.
Dank
Sie haben recht: dies ist nicht klar. Ich denke, Sie müssen den Aufruf der ursprünglichen Funktion nicht ändern, sondern ihre Definition. Wenn Sie das nicht ändern können, können Sie es wahrscheinlich auch nicht dekorieren. – hop
danke allen. Ich habe das alles viel zu schwierig gemacht, ich kann einfach die Funktion ohne all die * args, * kwargs stress ersetzen. Ich glaube auch, dass sich die Bereichsregeln seit Python 1.x geändert haben, jetzt kann ich eine Variable von der äußeren Funktion innerhalb der inneren Funktionsdefinition referenzieren. – Mzzzzzz