kullanarak değiştiriyorum. Python dekoratörünü kullanmayı öğreniyorum.Python: Bir işlevin iç davranışını dekoratör
def my_dcrtr(fun):
def new_fun():
return fun()
return new_fun
Dekoratörün içinde bir siyah kutu gibi işlev gören "eğlenceli" işlevinin gerçekleştirildiğini anlıyorum. New_fun içinde eğlenmeyi() kullanmayı veya hiç kullanmamayı seçebilirim. Bununla birlikte, eğlenceye girip giremeyeceğimi ve new_fun içinde eğlencenin yerel kapsamıyla etkileşime girip giremeyeceğimi bilmiyorum.
örn. Python ile bir oyuncak Uzaktan Yordam Çağrısı (RPC) yapmaya çalışıyorum. Bu örnekte
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))
, ben 'halk()' komutuyla zamanında rpc_fun argümanı listesini elde etmeye çalışmak. Sonra yürütmek için sunucuya gönderin. Rpc_fun yerlilerini() döndürmesine izin vermek yerine, dekore edilmiş fonksiyonun argüman alanını almak için dekoratör kullanmak mümkün mü?
Bunun nasıl çalıştığını anlamıyorum. İhtiyacım olan şey, 'decorated_fun' içinde 'fun_parameters' değerini çalışma zamanında {'a': 10, 'b': 20, 'c': 30} 'e eşit olacak şekilde yapmak, böylece sunucuya gönderebileceğim. Mümkün mü? –
@ShichuZhu lütfen son düzenlemeye bakın. – Ajax1234
Harika! Bu benim problemimi mükemmel bir şekilde çözer! Eğer sakıncası yoksa kalan iki soru: 1. İşlev bedenindeki her şey (yani a + b + c) hiçbir zaman idam edilmeyecek, değil mi? 2. (nvm ... Bir hata yaptım ...) –