2.9.2 条件判断的短路

甲:“你说,我算不算是高富帅?”

乙:“什么是高富帅?”

甲:“就是又帅又……”

乙:“你不是!”

为什么不让人把话说完?

如果根据已有的信息已经得到了确定的结果,后面的条件就不会被评估,因为后面的结果已经不会对整体结果造成影响,这就是条件判断的短路情况。

先来看上面例子中“且”的情况。


if sex == 'male' and major == 'cs':
    print('yes')

如果性别是男,程序会继续去检查专业是否是计算机;如果性别不是男,and条件组合中已经至少有一项的结果是“否”,那么,不管后续的条件判断结果是什么,整体的逻辑结果一定是“否”。在这种情况下,Python会直接忽略后续的条件判断,返回结果。

再来看上面例子中“或”的情况。


if major == 'cs' or major == 'ee':
    print('yes')

如果专业不是计算机,程序会继续检查后续的条件,看看是不是电子专业;如果专业是计算机,or条件组合中已经至少有一项的结果是“是”,那么,不管后续的条件判断结果是什么,整体的结果一定是“是”。在这种情况下,Python会直接忽略后续的条件判断,返回结果。

条件判断的短路行为,很多时候都被我们忽视了,这会造成以下一些问题。

1)在条件判断的组合中,我们不仅可以针对变量来判断,也可以调用函数(后续章节会讲到),针对函数的返回值来判断。如果有短路情况发生,函数调用被忽略,其中的操作就不会执行。有些时候这不一定是我们想要的结果。

2)在条件判断的组合中有调用函数的情况下,有可能函数调用的操作比较复杂,需要花费比较多的时间。在这种情况下,我们更希望前面有更简单的判断结果形成“短路”,避免不必要的函数调用执行,从而提高了代码的执行效率。