原文:http://www.open-open.com/lib/view/open1346511811678.html
a, b, c = 1, 2, 3
1.常规
if a>b:
c = a
else:
c = b
2.表达式
c = a if a>b else b
3.二维列表
c = [b,a][a>b]
4.传说是源自某个黑客
c = (a>b and [a] or [b])[0]
试验了下 c = a>b and a or b 与4效果一样
但是 当a = 0 的时候会出跳过a, 直接到b。
以下来自 Dive_into_python 5.4
例 4.19. 安全使用 and-or 技巧
>>> a = "" >>> b = "second" >>> (1 and [a] or [b])[0] ''
到现在为止,这个技巧可能看上去问题超过了它的价值。毕竟,使用 if 语句可以完成相同的事情,那为什么要经历这些麻烦事呢?哦,在很多情况下,你要在两个常量值中进行选择,由于你知道 a 的值总是为真,所以你可以使用这种较为简单的语法而且不用担心。对于使用更为复杂的安全形式,依然有很好的理由要求这样做。例如,在 Python 语言的某些情况下 if 语句是不允许使用的,比如在 lambda 函数中。