Ich schreibe einen Dekorator, der vor dem Aufruf der Funktion, die es dekorieren ist, andere Funktionen aufrufen muss. Die dekorierte Funktion kann Positionsargumente haben, aber die Funktionen, die der Dekorator aufrufen wird, können nur Schlüsselwortargumente akzeptieren. Hat jemand eine praktische Möglichkeit, Positionsargumente in Schlüsselwortargumente umzuwandeln?Python Konvertieren Args zu Kwargs
Ich weiß, dass ich eine Liste der Variablennamen der dekorierten Funktion bekommen:
>>> def a(one, two=2):
... pass
>>> a.func_code.co_varnames
('one', 'two')
Aber ich kann nicht herausfinden, wie zu sagen, was in ihrer Position übergeben wurde und was als Schlüsselwort.
Mein Dekorateur sieht wie folgt aus:
class mydec(object):
def __init__(self, f, *args, **kwargs):
self.f = f
def __call__(self, *args, **kwargs):
hozer(**kwargs)
self.f(*args, **kwargs)
Gibt es eine Möglichkeit andere als nur den Vergleich kwargs und co_varnames, etwas hinzuzufügen dort zu kwargs nicht, und das Beste zu hoffen?
Warum brauchen Sie wissen, was args waren positionell? –
Weil ich sie in Kwarts konvertieren muss, um die Hozer-Funktion aufzurufen. Diese Funktion akzeptiert nur Kwargs, muss jedoch alle ursprünglich aufgerufenen Argumente kennen. Je nachdem, ob Leute die dekorierte Funktion mit positionellen oder benannten Argumenten aufrufen, erhält die Hozer-Funktion möglicherweise nicht alle Daten, die sie benötigt. – jkoelker