Ich lerne, Python Decorator zu verwenden.Python: Ändern Sie das interne Verhalten einer Funktion mit Dekorator
Ich erkenne die verzierte Funktion "Spaß" wirkt wie eine Blackbox im Dekorateur. Ich kann wählen, Spaß() oder überhaupt nicht innerhalb new_fun zu verwenden. Ich weiß jedoch nicht, ob ich in "Spaß" einsteigen und mit der lokalen Reichweite von Fun innerhalb der new_fun interagieren kann.
z.B. Ich versuche, mit Python einen Remote Procedural Call (RPC) zu machen.
def return_locals_rpc_decorator(fun):
def decorated_fun(*args, **kw):
local_args = fun(*args, **kw)
# pickle the local_args and send it to server
# server unpickle and doing the RPC
# fetch back server results and unpickle to results
return rpc_results
return decorated_fun
@return_locals_rpc_decorator
def rpc_fun(a, b, c=3):
return locals() # This looks weird. how can I make this part of the decorator?
print(rpc_fun(2, 1, 6))
In diesem Beispiel versuche ich rpc_fun Argument Liste zur Laufzeit mit den ‚Einheimischen()‘ Befehl zu erhalten. Dann senden Sie es zur Ausführung an den Server. Anstatt zuzulassen, dass rpc_fun seine Locals() zurückgibt, ist es möglich, den Decorator zu verwenden, um den Argumentraum der verzierten Funktion abzurufen?
Ich verstehe nicht, wie das funktioniert. Was ich brauche, ist, 'fun_parameters' innerhalb der 'distributed_fun' gleich {'a': 10, 'b': 20, 'c': 30} zur Laufzeit zu machen, damit ich es an den Server senden kann. Ist das möglich? –
@ShichuZhu siehe meine letzte Änderung. – Ajax1234
Super! Das löst mein Problem perfekt! Zwei verbleibende Fragen, wenn es Ihnen nichts ausmacht: 1. Alles im Körper der Funktion (d. H. A + b + c) wird niemals ausgeführt, oder? 2. (nvm ... Ich habe einen Fehler gemacht ...) –