使用列表理解進行條件表示式評估

Python 允許你破解列表推導以評估條件表示式。

例如,

[value_false, value_true][<conditional-test>]

例:

>> n = 16
>> print [10, 20][n <= 15]
10

這裡 n<=15 返回 False(在 Python 中等於 0)。那麼 Python 正在評估的是:

[10, 20][n <= 15]
==> [10, 20][False] 
==> [10, 20][0]     #False==0, True==1 (Check Boolean Equivalencies in Python)
==> 10

Python 2.x <= 2.7

內建的 __cmp__ 方法返回了 3 個可能的值:0,1,-1,其中 cmp(x, y)返回 0:如果兩個 objecs 相同 1:x> y -1:x <y

這可以與列表推導一起使用以返回列表的第一個(即索引 0),第二個(即索引 1)和最後一個(即索引 -1)元素。給我們這種型別的條件:

[value_equals, value_greater, value_less][<conditional-test>]

最後,在上面的所有示例中,Python 在選擇一個分支之前評估兩個分支。僅評估所選分支:

[lambda: value_false, lambda: value_true][<test>]()

在末尾新增 () 確保 lambda 函式最後只被呼叫/計算。因此,我們只評估所選分支。

例:

count = [lambda:0, lambda:N+1][count==N]()