使用列表理解进行条件表达式评估
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]()