在Python的循环体中使用else语句的方法
2020-05-26 09:54Shahriar Tajbakhsh Python
这篇文章主要介绍了在Python的循环体中使用else语句的方法,else语句的使用在各种语言的学习当中均为基本功、本文中主要介绍其在for循环中的应用,需要的朋友可以参考下
本文讨论Python的for…else和while…else语法,这是Python中最不常用、最为误解的语法特性之一。
Python中的for、while循环都有一个可选的else分支(类似if语句和try语句那样),在循环迭代正常完成之后执行。换句话说,如果我们不是以除正常方式以外的其他任意方式退出循环,那么else分支将被执行。也就是在循环体内没有break语句、没有return语句,或者没有异常出现。考虑一个简单的(无用的)例子:
?
1
2
3
4
5
6
7
8
9
10
11
|
>>> 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" id="codetool">
上面的代码中,我们在range(5)上迭代并打印每个数字。因为我们让循环正常完成,所以else分支也被执行,并打印出Iterated over everything :) 。相反,如果我们用break语句终止循环,那么else分支将不会执行:
?
1
2
3
4
5
6
7
8
9
|
>>> 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" id="codetool">
注意,尽管循环所迭代的序列是空的,else分支依然会被执行,毕竟循环仍然是正常完成的。
?
1
2
3
4
5
6
|
>>> for i in []:
... print (i)
... else :
... print ( 'Still iterated over everything (i.e. nothing)' )
...
Still iterated over everything (i.e. nothing)
|
同样不要忘记,以上所有也适应于while…else:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
|
>>> i = 0
>>> while i < = 5 :
... i + = 1
... print i
... else :
... print 'Yep'
...
1
2
3
4
5
Yep
|
但是,为什么呢!?
else语句在循环中的一个常见使用案例是实现循环查找。假说你在查找一个满足特定条件的项目(item),同时需要进行附加处理,或者在未发现可接受的值时生成一个错误:
?
1
2
3
4
5
|
for x in data:
if meets_condition(x):
break
else :
|
没有else语句的话,你需要设置一个标志,然后在后面对其检测,以此确定是否存在满足条件的值。
?
1
2
3
4
5
6
7
|
condition_is_met = False
for x in data:
if meets_condition(x):
condition_is_met = True
if not condition_is_met:
|
这不是一个真正重要的东西,而在许多其他语言中你必须要如此做。但是类似Python的许多其他特性,else语句可以生成更加优雅的Python风格的(Pythonic)代码。毫无疑问,上面的例子中,使用else语句使得代码更加The Zen of Python友好:
这并不是说你不得不在循环中使用else语句,你总是可以使用标志等等。但是else语句常常可以使代码更加优雅、更具可读性。你可能认为这样Pythonic,而且使意图更加清楚(嗨!),然而其他人可能认为这样有迷惑性,而且冗余!个人来说,我坚持在循环中使用else语句,除非存在另一个更具可读性的方法(我想,对我来说,代码的可读性是最重要的)。
- Python
这篇文章主要介绍了在Windows系统上搭建Nginx+Python+MySQL环境的教程,文中使用flup中间件及FastCGI方式连接,需要的朋友可以参考下
...
13232020-08-05
- Python
今天小编就为大家分享一篇使用NumPy和pandas对CSV文件进行写操作的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...
13602021-03-05
- Python
在本篇内容里小编给大家分享的是关于Python3以GitHub为例来实现模拟登录和爬取的实例讲解,需要的朋友们可以参考下。
...
5262020-07-31
- Python
这篇文章主要介绍了python 列表转为字典的两个小方法(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...
16532021-07-25
- Python
今天小编就为大家分享一篇Python实现ping指定IP的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...
12882021-02-28
- Python
下面小编就为大家带来一篇python直接访问私有属性的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
...
5152020-09-03
- Python
这篇文章主要介绍了python 插入Null值数据到Postgresql的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...
6452021-09-16
- Python
这篇文章主要介绍了Python的dict字典结构操作方法学习笔记本,字典的操作是Python入门学习中的基础知识,需要的朋友可以参考下...
4392020-08-22
| |