簡體   English   中英

條件表達式中的替換表達式

[英]Substitute expression in conditional expression

我可以做這樣的事情:

["val1" if some_method() == True
    else "val2" if some_method() == False
    else "val3"]

這可行,但是我必須多次調用some_method() 當然,我可以這樣做:

m = some_method()
["val1" if m == True
    else "val2" if m == False
    else "val3"]

但是現在我已經為其余的代碼聲明了 m 。 有一個更好的方法嗎? 我在想這樣的事情:

[with some_method() as m:
    "val1" if m == True
    else "val2" if m == False
    else "val3"]

Python 3.9 優化了這個習語

["val1" if m == True
    else "val2" if m == False
    else "val3"
 for m in [some_method()]]

或者,如果方法的結果是可散列的:

[{True: "val1", False: "val2"}.get(some_method(), "val3")]

Python 本身並不支持 switch 語句或let塊,這兩者都可以直接解決您的變量范圍問題。 但我們總是可以用 lambdas 近似構造。

[(lambda m: "val1" if m == True else "val2" if m == False else "val3")(some_method())]

但是到那時,您可能想問自己,將這段邏輯放入其自己恰當命名的函數中是否更好

def some_method_val():
  m = some_method()
  return "val1" if m == True else "val2" if m == False else "val3"

[some_method_val()]

那么m只存在於函數調用期間,而不是整個程序,如果選擇得當,函數名稱可以作為方便的文檔,說明您為什么使用布爾值執行此調度操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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