Python中循环语句中的else用法
来源:互联网 发布:淘宝客户vip设置 编辑:程序博客网 时间:2024/06/05 06:26
本文讨论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 :)')...01234Iterated over everything :)
上面的代码中,我们在range(5)上迭代并打印每个数字。因为我们让循环正常完成,所以else分支也被执行,并打印出Iterated over everything :) 。相反,如果我们用break语句终止循环,那么else分支将不会执行:
>>>foriinrange(5):... ifi==2:... break... print(i)...else:... print('Iterated over everything :)')...01
注意,尽管循环所迭代的序列是空的,else分支依然会被执行,毕竟循环仍然是正常完成的。
>>> for i in []:... print(i)... else:... print('Still iterated over everything (i.e. nothing)')...Still iterated over everything (i.e. nothing)
同样不要忘记,以上所有也适应于while…else:
Python>>>i=0>>>whilei<=5:... i+=1... printi...else:... print'Yep'...12345Yep
但是,为什么呢!?
else语句在循环中的一个常见使用案例是实现循环查找。假说你在查找一个满足特定条件的项目(item),同时需要进行附加处理,或者在未发现可接受的值时生成一个错误:
for x in data: if meets_condition(x): breakelse: # raise error or do additional processing
没有else语句的话,你需要设置一个标志,然后在后面对其检测,以此确定是否存在满足条件的值。
Pythoncondition_is_met=Falseforxindata: ifmeets_condition(x): condition_is_met=True ifnotcondition_is_met: # raise error or do additional processing
这不是一个真正重要的东西,而在许多其他语言中你必须要如此做。但是类似Python的许多其他特性,else语句可以生成更加优雅的Python风格的(Pythonic)代码。毫无疑问,上面的例子中,使用else语句使得代码更加The Zen of Python友好:
这并不是说你不得不在循环中使用else语句,你总是可以使用标志等等。但是else语句常常可以使代码更加优雅、更具可读性。你可能认为这样Pythonic,而且使意图更加清楚(嗨!),然而其他人可能认为这样有迷惑性,而且冗余!个人来说,我坚持在循环中使用else语句,除非存在另一个更具可读性的方法(我想,对我来说,代码的可读性是最重要的)。
转载地址:http://python.jobbole.com/81063/
- Python中循环语句中的else用法
- Python循环中的else语句
- [Python]循环语句中的 else 子句
- python中else语句的用法
- Python 中 else语句的其他用法
- python 循环中的else
- Python 中的else语句
- python循环语句中的else,break和continue
- [python]循环中的else子句
- Python 中的循环与 else
- 详解Python中的循环语句的用法
- Python中else语句整理
- Python中else语句整理
- Python中else语句整理
- Python 中的for-else用法
- python3 for 循环中的 else 语句
- python中else的用法
- python核心编程学习笔记-2016-07-31-01-循环语句中的else子句
- Spring中基于注解的AOP
- Jenkins-自定义Plugin创建
- 1 uml类图
- AVA实现基于Tcp协议的简单Socket通信实例
- Java-基础 文件操作IO-读取文件内容
- Python中循环语句中的else用法
- session取值
- 设计模式系列Python实现(一)-单例模式(Singleton)
- Spring MVC AOP通过注解方式拦截Controller等实现日志管理
- OpenGL 学习笔记3_5(缓冲区相关) 模板缓冲区待详细分析
- 检查eclipse是否安装了svn源代码管理插件
- 关于H5游戏开始时背景音效会出现卡顿的问题
- CentOS中使用VeraCrypt(三):不使用向导创建加密磁盘
- StringUtils中 isNotEmpty 和isNotBlank的区别