我想做类似的事情
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'