Python之三元表达式嵌套三元表达式解析

Python的三元表达式相信学过python的朋友都会。但是大部分学python的朋友不知道的是三元表达式还可以嵌套三元表达式。

Python之三元表达式嵌套三元表达式解析

请看代码案例:

cmp = lambda a, b: 0 if a == b else 1 if a > b else -1 
print(cmp(3,2)) 
print(cmp(2,3)) 
print(cmp(2,2)) 
out:1 
-1 
0 

以上代码的功能是对两个数进行比较,若第一个数等于第二个数返回0;若第一个数大于第二个数返回1;若第一个数小于第二个数返回-1。

直接看是不是比较懵?我把它拆分一下,换一种写法,会容易懂得多。

def cmp2(a, b): 
    if a == b: 
        return 0 
    else: 
        if a > b: 
            return 1 
        else: 
            return -1 
print(cmp2(3, 2)) 
print(cmp2(2, 3)) 
print(cmp2(2, 2)) 
out:1 
-1 
0 

可以看到上述2个函数功能完全一致,第一种写法简洁的多!

再来熟悉一下这种写法,为了便于理解我多加了对括号:

0 if a == b else (1 if a > b else -1) 

这种语句是三元表达式嵌套三元表达式的结构,从左向右计算。

三元表达式首先找if,找到if判断a ==b (判断元素):

  • 若该条件满足则返回if左边的0(结果元素1)作为整个表达式的运算结果。
  • 若该判断条件不满足则返回判断条件右边的三元表达式(结果元素2)。

右边仍然是三元表达式,继续计算该三元表达式,找到if判断a>b(判断元素):

  • 若该条件满足则返回if左边的1(结果元素1)作为整个表达式的运算结果。
  • 若该判断条件不满足则返回判断条件右边的-1(结果元素2)作为整个表达式的运算结果。