今天来说说三元表达式。
本来我个人觉得三元表达式很简单,无非就是下面的这样的格式嘛。
a = 10
b = 22
max = a if a>b else b
if a>b:
max = a
else:
max = b
这是不是很好理解。
但是我还是决定写一遍文章来记录这个三元表达式,这是为什么呢?
因为这里面还是有一些比较难理解的东西,就是我们下面要说的三元表达式的嵌套。
就说下面这道题,我一开始就没有搞明白。
使用嵌套的三元组表达式统计数字频率,如果是2的倍数加1,如果是4的倍数加2,否则加0
if __name__ == '__main__':
pi = [3, 14, 15, 9, 26, 5, 35, 8, 97, 932]
even_count = 0
for i in pi:
# TODO(You): 请在此实现统计代码
assert even_count == 6
#请选出下列能正确实现这一功能的选项。
我们先说正确答案,然后再来理解哈。
even_count += 2 if i % 4 == 0 else 1 if i % 2 == 0 else 0
我们如果不用三元表达式来写这段代码应该是怎么样呢?
完整代码如下:
if __name__ == '__main__':
pi = [3, 14, 15, 9, 26, 5, 35, 8, 97, 932]
even_count = 0
for i in pi:
# TODO(You): 请在此实现统计代码
if i % 4 == 0:
even_count += 2
elif i % 2 == 0:
even_count += 1
else:
even_count += 0
print(even_count == 6)
看了分解的代码,我们再来理解上面的代码,为了方便,复制到下面:
even_count += 2 if i % 4 == 0 else 1 if i % 2 == 0 else 0
我们要清楚,这样的嵌套其实最后最能选定一个结果,就是说,这个嵌套跟我们的python中的if…elif…else结构一样,而不是if…if…else,这样的结构可能会选定多个结果。
我们从左往右读代码也是一样的,也是python对这句话的执行顺序。
首先读
if i % 4 == 0
如果这个条件成立,那就直接执行
even_count += 2
后面的条件也就不管了,如果这个条件不成立,才会继续判断条件
if i % 2 ==0
如果条件成立,那么就会执行相应的语句
even_count += 1
否则执行语句
even_count += 0
不知道我这样说你理解了没有,至于这道题为什么是要 if i % 4 == 0 在 if i % 2 ==0 前面,是因为前面一个条件包含了第二个条件,这样想,如果把 if i % 2 ==0 放在 if i % 4 == 0 前面,那么那些4的倍数就不会被单独提出来,而是和2的倍数一起放在一个集合里面,这显然不是我们想要的。