[英]Assign a value of one key to another key in if statement within for loop Python
[英]Assign within if statement Python
有沒有比這更簡單的選擇
res = returns_value_or_none(arg)
if res:
do_something_with(res)
要么
if returns_value_or_none(arg):
do_something_with(returns_value_or_none(arg))
一種將賦值和if
條件組合到一個語句中的語句?
通常,你所擁有的已經是最好的選擇。
您始終可以創建一個新范圍來將值綁定到變量:
(lambda res: do_something_with(res) if res else None)(returns_value_or_none(arg))
但這肯定不會更具可讀性,或者更像 Pythonic。
如果你只想保存一行,你可以這樣做:
res = returns_value_or_none(arg)
if res: do_something_with(res)
這有時更具可讀性,但通常是凈損失。
解決這個問題的另一種方法是將do_something_with
更改為接受None
並且什么都不做。 這在 Python 中並不像在 Smalltalk 或 Swift 中那么常見,但有時它確實有它的位置。
很難理解為什么使用這樣的玩具示例,但是如果您調用這些函數 70 次,將檢查放在函數內部的一個地方,而不是 70 個地方,它被調用的任何地方,顯然是一個勝利。 (特別是因為您可能會將它放在 68 個位置而忘記了其他 2 個。)
最后但並非最不重要的一點是,在許多情況下,正確的答案是例外。 如果您通過None
您的do_something_with
可能已經提高了。 而且您肯定可以將returns_value_or_none
更改為returns_value_or_raises
。
同樣,在這個玩具示例中,它看起來就像是更多的代碼。 但是在現實生活中的代碼中,將整個代碼塊放在try
/ except
通常是有意義的,並在最后一次處理所有錯誤。 或者甚至讓異常滲透到更容易處理的更高級別。
當然,這並不適用於所有情況。 如果您期望None
是一個頻繁且完全合理的響應,並且只想跳過一個步驟而不是中止整個操作鏈,那么檢查或傳遞None
將比將您的代碼亂扔垃圾更有意義try
塊。
對於 Python 3.8+, PEP 572引入了賦值表達式
這允許使用符號NAME := expr
在表達式中分配變量。 它可以在 if 語句中使用,例如:
if (match := pattern.search(data)) is not None:
# Do something with match
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.