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