我想做点什么
if a:
dec = decorator_1
else:
dec = decorator_2
@dec
def foo():
pass
可能?
答案 0 :(得分:1)
是的,只要在函数定义之前评估if
语句和赋值。
例如,您上面编写的代码可以使用,但以下内容不会:
def bar():
global dec
if a:
dec = decorator_1
else:
dec = decorator_2
@dec
def foo():
pass
bar()
答案 1 :(得分:1)
你有什么工作,但我建议以不同的方式实施它:
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'