[英]A decorator to convert arguments of a function
我想使用裝飾器來轉換函數的參數。
所以不要這樣做:
def get_data(dt, symbol, depth, session):
dt = to_date(dt)
...
要么
def get_data(dt, symbol, depth, session):
dt = convert(dt, to_date)
...
我希望能夠寫類似
@convert('dt', to_date)
def get_data(dt, symbol, depth, session):
...
但是我對此功能不太滿意。
怎么寫這樣的裝飾器?
稍微弄弄它,並學到了很多有關發電機的知識:
def convert(arg, mod):
def actual_convert(fn):
if arg not in fn.__code__.co_varnames:
return fn
else:
def new_function(*args, **kwargs):
l_args = list(args)
index = fn.__code__.co_varnames.index(arg)
l_args[index] = mod(l_args[fn.__code__.co_varnames.index(arg)])
args = tuple(l_args)
return fn(*args, **kwargs)
return new_function
return actual_convert
@convert('x',lambda x: x+1)
def add(x,y):
return x + y
print("Should be 5:",add(3,1))
目前,這僅適用於普通參數,不適用於關鍵字參數。 不過,這樣做也很容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.