python中的三元表达式

文章目录

  • 前言
  • 一、python中的三元表达式


前言

今天来说说三元表达式。


一、python中的三元表达式

本来我个人觉得三元表达式很简单,无非就是下面的这样的格式嘛。

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的倍数一起放在一个集合里面,这显然不是我们想要的。

你可能感兴趣的:(python,python)