条件语句在编程语言中再寻常不过了,只要你需要编写程序,那么几乎一定会用到 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
... 的理解以及使用体会,希望在你遇到同样的问题时,能够对你有所帮助。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。