使用列表理解进行条件表达式评估

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]()