大多数编程语言都提供了 if...else... 语句,即表示如果满足条件就做这件事,否则就做另外一件事。同时,在 Python 中 else 除了可以与 if 搭配使用,还有其他特别的语法: for…else …、while…else …、try…except...else 。
我们先来看一段代码,如下:
上面的代码中,打印结果会是什么呢?我们执行一下,打印信息如下:
我们可以发现,如果循环块中代码正常执行,则执行else代码块,如果前面的循环未执行完,则不执行else代码块。这与 if… else… 刚好相反,在 if… else… 语句中如果if代码块没有执行,则执行else代码块。
我们看一下官方文档中是如何解释的:
A break statement executed in the first suite terminates the loop without executing the else clause’s suite. A continue statement executed in the first suite skips the rest of the suite and continues with the next item, or with the else clause if there is no next item.
当用 break 关键字终止当前循环时,则不会执行 else 语句。而使用 continue 关键字快速进入下一轮循环,或者没有使用其他关键字,循环的正常结束后,就会执行 else 语句。
同样,我们再看一下 while…else … 语句,如下:
我们执行上面代码,打印信息如下:
我们可以发现这与 for... else... 语法相同,如果循环块中代码正常执行,则执行else代码块,如果前面的循环未执行完,则不执行else代码块。
那么这种用法有哪些场景会使用到呢?
答:似乎除了下面这种场景,几乎没有其他场景会用到该语法。
当我们使用 for 循环遍历列表查找某个元素(或者是更加复杂的数据结构)时,如果找到了就立刻退出循环,如果遍历完所有元素还没找到,则需要以另外一种形式(如,异常)的方式告知,此时,用 for... else... 会非常的优雅,如下:
如果不使用 for... else... , 那么还需特意创建一个标志位来标记是否已经找到,如下:
最后,需要注意因为这种语法在实际应用中比较稀有,也容易与 if... else... 混淆,建议用到此语法时,添加注释说明,避免引起其他误操作。