2013-08-23 12 views
0

的情況我想這樣做根據在Python

if a: 
    dec = decorator_1 
else: 
    dec = decorator_2 

@dec 
def foo(): 
    pass 

可以申請兩個修飾的一個?

回答

1

是的,只要if語句和賦值在函數定義之前被求值。

例如,按照上面的方法將工作,但你的代碼下面將不會:

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

@dec 
def foo(): 
    pass 

bar() 
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'