[英]Python assignment command grammar
我正在閱讀以下python代碼段,有些內容我不理解。 root是一個自定義類,代表一個樹節點。 誰能解釋為什么root的Assignment命令以這種方式起作用?
while (p.val - root.val) * (q.val - root.val) > 0:
root = [root.left, root.right][p.val > root.val]
[root.left, root.right]
是2個值的list
。
p.val > root.val
是用作索引的布爾值:值可以為0或1。
因此,這是一種避免(顯式)測試值的方法,只需根據0
或1
索引結果即可(但測試仍然存在)
盡管這似乎是一個好主意,但在Python中進行這種構造的效率令人懷疑:它動態創建一個列表,然后按索引(使用邊界檢查)對其進行訪問,更不用說它必須同時評估兩個root.left
和root.right
不管結果如何(沒有短路)。
我認為您最好使用以下三元表達式:
root = root.right if p.val > root.val else root.left
它是顯式的,短路的,並且不會創建/訪問臨時列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.