簡體   English   中英

根據Python中的條件應用兩個裝飾器中的一個

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM