0

我想做类似的事情

if a:
  dec = decorator_1
else:
  dec = decorator_2

@dec
def foo():
  pass

可能的?

4

2 回答 2

1

是的,只要if在函数定义之前评估语句和赋值。

例如,您上面编写的代码可以工作,但以下代码不会:

def bar():
  global dec
  if a:
    dec = decorator_1
  else:
    dec = decorator_2

@dec
def foo():
  pass

bar()
于 2013-08-23T02:42:34.660 回答
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'
于 2013-08-23T08:19:08.137 回答