手机
当前位置:查字典教程网 >脚本专栏 >python >在Python的循环体中使用else语句的方法
在Python的循环体中使用else语句的方法
摘要:本文讨论Python的for…else和while…else语法,这是Python中最不常用、最为误解的语法特性之一。Python中的for...

本文讨论Python的for…else和while…else语法,这是Python中最不常用、最为误解的语法特性之一。

Python中的for、while循环都有一个可选的else分支(类似if语句和try语句那样),在循环迭代正常完成之后执行。换句话说,如果我们不是以除正常方式以外的其他任意方式退出循环,那么else分支将被执行。也就是在循环体内没有break语句、没有return语句,或者没有异常出现。考虑一个简单的(无用的)例子:

>>> for i in range(5): ... print(i) ... else: ... print('Iterated over everything <img src="http://python.jobbole.com/wp-includes/images/smilies/icon_smile.gif" alt=":)"> ') ... 0 1 2 3 4 Iterated over everything <img src="http://python.jobbole.com/wp-includes/images/smilies/icon_smile.gif" alt=":)">

上面的代码中,我们在range(5)上迭代并打印每个数字。因为我们让循环正常完成,所以else分支也被执行,并打印出Iterated over everything :) 。相反,如果我们用break语句终止循环,那么else分支将不会执行:

>>> for i in range(5): ... if i == 2: ... break ... print(i) ... else: ... print('Iterated over everything <img src="http://python.jobbole.com/wp-includes/images/smilies/icon_smile.gif" alt=":)"> ') ... 0 1

注意,尽管循环所迭代的序列是空的,else分支依然会被执行,毕竟循环仍然是正常完成的。

>>> for i in []: ... print(i) ... else: ... print('Still iterated over everything (i.e. nothing)') ... Still iterated over everything (i.e. nothing)

同样不要忘记,以上所有也适应于while…else:

>>> i = 0 >>> while i <= 5: ... i += 1 ... print i ... else: ... print 'Yep' ... 1 2 3 4 5 Yep

但是,为什么呢!?

else语句在循环中的一个常见使用案例是实现循环查找。假说你在查找一个满足特定条件的项目(item),同时需要进行附加处理,或者在未发现可接受的值时生成一个错误:

for x in data: if meets_condition(x): break else: # raise error or do additional processing

没有else语句的话,你需要设置一个标志,然后在后面对其检测,以此确定是否存在满足条件的值。

condition_is_met = False for x in data: if meets_condition(x): condition_is_met = True if not condition_is_met: # raise error or do additional processing

这不是一个真正重要的东西,而在许多其他语言中你必须要如此做。但是类似Python的许多其他特性,else语句可以生成更加优雅的Python风格的(Pythonic)代码。毫无疑问,上面的例子中,使用else语句使得代码更加The Zen of Python友好:

这并不是说你不得不在循环中使用else语句,你总是可以使用标志等等。但是else语句常常可以使代码更加优雅、更具可读性。你可能认为这样Pythonic,而且使意图更加清楚(嗨!),然而其他人可能认为这样有迷惑性,而且冗余!个人来说,我坚持在循环中使用else语句,除非存在另一个更具可读性的方法(我想,对我来说,代码的可读性是最重要的)。

【在Python的循环体中使用else语句的方法】相关文章:

python脚本实现查找webshell的方法

python实现跨文件全局变量的方法

跨平台python异步回调机制实现和使用方法

Python 元类使用说明

Python的一些用法分享

采用python实现简单QQ单用户机器人的方法

python二叉树遍历的实现方法

python爬取网站数据保存使用的方法

Python中文件遍历的两种方法

Python中使用动态变量名的方法

精品推荐
分类导航