簡體   English   中英

使用內聯 if-else 的元組(un)打包的優先級

[英]Priority of tuple (un)packing with inline if-else

提前為晦澀的標題道歉。 我不確定如何描述我遇到的情況。

想象一下,您在變量title_author中有一本書的標題和作者,用-分隔。 您從 web 中抓取了此信息,因此很可能該項目為None 顯然你想把標題和作者分開,所以你會使用 split。 但是如果title_author一開始是 None ,你只需要titleauthor都是None

我認為以下是一個很好的方法:

title_author = "In Search of Lost Time - Marcel Proust"
title, author = title_author.split("-", 1) if title_author else None, None
print(title, author)
# ['In Search of Lost Time ', ' Marcel Proust'] None

但令我驚訝的是, title now 是拆分的結果,而authorNone 解決方案是通過括號的方式顯式表明else 子句是一個元組。

title, author = title_author.split("-", 1) if title_author else (None, None)
print(title, author) 
# In Search of Lost Time   Marcel Proust

那么為什么會這樣呢? 導致第一種情況的結果的執行順序是什么?

title, author = title_author.split("-", 1) if title_author else None, None

是相同的:

title, author = (title_author.split("-", 1) if title_author else None), None

因此, author始終為None


解釋

來自官方文檔

賦值語句計算表達式列表(請記住,這可以是單個表達式或逗號分隔的列表,后者產生一個元組)並將單個結果 object 從左到右分配給每個目標列表。

也就是說,中斷器將查找(x,y)=(a,b)並將值分配為x=ay=b

在您的情況下,有兩種解釋,主要區別在於:

  1. title, author = (title_author.split("-", 1) if title_author else None), None將兩個值(一個列表或一個 None 和一個 None)分配給兩個變量,不需要解包。

  2. title, author = title_author.split("-", 1) if title_author else (None, None)實際上是將一個值(列表或元組)分配給兩個變量,這需要一個解包步驟 map 兩個變量到兩個列表/元組中的值。

由於選項1無需拆包即可完成,即操作較少,因此滅弧室將go與選項1無明確說明。

暫無
暫無

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

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