条件语句在编程语言中再寻常不过了,只要你需要编写程序,那么几乎一定会用到 if
… else
… 这样的条件语句进行条件判断。所以通用编程语言都会提供 if
… else
… 这样的语法。Python 也不例外,不过 Python 不只有 if
… else
… 这样的语法,它还提供了 for
… else
…、try
… except
… else
… 等这样的语法。今天我们只讨论 for
… else
… 语法,来看看 Python 的 else
语句跟在 for
后面与跟在 if
后面有什么异同。
先看一段代码示例:
for i in [1, 2, 3]: print(i) else: print('done')
执行结果:
1 2 3 done
如果不执行这段代码,只看这段代码的写法,也许你会猜测它的执行结果应该只有 1、2、3 三个数,而没有 done
。因为在 if
… else
… 的逻辑里,如果 if
的条件为真,那么就不会执行 else
语句下的代码块。
但根据打印结果来看,显然不符合我们的预期。带着疑问,我们再看下面一段示例代码:
for i in []: print(i) else: print('done')
执行结果:
done
这次的结果只有一个 done
,貌似这段代码看起来更合理些。因为 for
遍历的列表为空,所以条件不成立,那么就该执行 else
的逻辑,真的是这样吗?我们接着看下面示例。
我们知道 for
语句块中可以出现 continue
和 break
两个关键字,那么我们先来测试一下,如果 for
语句块中包含 continue
会是什么结果。
for i in [1, 2, 3]: if i == 2: continue print(i) else: print('done')
执行结果:
1 3 done
这个结果和第一段代码示例差不多,只不过在 i == 2
的时候,跳过了本次循环,继续执行下一次循环。
最后我们再来看看如果 for
语句块中包含 break
会出现什么结果。
for i in [1, 2, 3]: if i == 2: break print(i) else: print('done')
执行结果:
1
根据上面这段代码的打印结果,我想你也许已经明白了 Python 中 for
… else
… 语句的执行特点。没错,实际上如果按照 if
… else
… 是互斥的逻辑来理解 for
… else
…,那么其实 for
语句块内部的 break
才真正跟 else
是一对条件语句。
如果 for
循环中执行了 break
语句,那么就不会再执行 else
语句块内部的代码了。
知道了 Python 的 for
… else
… 语句的语法,但是它有什么用呢?我最开始接触 for
… else
… 语句的时候觉得它完全没用,以至于我写了很久的 Python 代码都没有用到过,甚至几乎已经忘记了 Python 提供的这个语法。直到我开始写 ERP
项目的时候,我才发现 for
… else
… 的真正用途。因为写 ERP
系统会遇到各种复杂的业务需求,如果能够用 for
… else
… 解决问题,代码逻辑看起来就会清晰不少,这大大增加了项目的可维护性。
假如用 for
循环遍历一个可迭代对象,如果可迭代对象内部有一个元素符合条件,那么就执行一个逻辑,然后 break
掉,如果全部都不符合,就执行 else
的语句去执行另一个逻辑,示例代码如下:
for i in 可迭代对象: if 条件判断: 执行一个逻辑 break else: 执行另一个逻辑
这种代码显然比下面这种不用 for
… else
… 的写法可读性更强,并且更加符合 Pythonic
的写法。
flag = False for i in 可迭代对象: if 条件判断: 执行一个逻辑 flag = True break if not flag: 执行另一个逻辑
以上,就是我对 for
… else
… 的理解以及使用体会,希望在你遇到同样的问题时,能够对你有所帮助。