[英]Apply one of two decorators according to a condition in Python
我想做點什么
if a:
dec = decorator_1
else:
dec = decorator_2
@dec
def foo():
pass
可能?
是的,只要在函數定義之前計算if
語句和賦值。
例如,您上面編寫的代碼可以使用,但以下代碼不會:
def bar():
global dec
if a:
dec = decorator_1
else:
dec = decorator_2
@dec
def foo():
pass
bar()
你有什么工作,但我建議以不同的方式實現它:
def dec(f):
return decorator_1(f) if a else decorator_2(f)
@dec
def foo():
print 'foo'
因為沒有條件定義,這會做同樣的事情。 更進一步,避免引用全局變量的更清晰的方法可以這樣定義:
def dec(a):
return decorator_1 if a else decorator_2
@dec(a)
def foo():
print 'foo'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.