python的else子句使用指南


Posted in Python onFebruary 27, 2016

在日常coding中,分支语句的使用非常普遍,经常会根据是否满足一定的条件对代码执行的逻辑进行一些控制,所以大家对if[elif[else]]一定不会陌生。分支语句中的else子句在其它的条件不满足的时候会被执行到,适当的使用分支语句能够让我们的代码逻辑更加的丰富。

在分支语句中使用else子句在一些常见的编程语言中的用法基本相同,类似于提供了一条默认的执行路径,配合if等条件判断语句使用,相比其它的编程语言(c#, java, js等)在python中,else有一些特殊的用法,配合for, while等循环语句使用,甚至还能配合异常处理try except语句进行使用,能够让我们的代码更加的简洁。

配合for/while循环语句使用

在for循环语句的后面紧接着else子句,在循环正常结束的时候(非return或者break等提前退出的情况下),else子句的逻辑就会被执行到。先来看一个例子:

def print_prime(n):
  for i in xrange(2, n):
    # found = True
    for j in xrange(2, i):
      if i % j == 0:
         # found = False 
        break
    else:
      print "{} it's a prime number".format(i)
    # if found:
         # print "{} it's a prime number".format(i)
 
print_prime(7)
 
2 it's a prime number
3 it's a prime number
5 it's a prime number

一个简单打印素数的例子,判断某个数字是否是素数的时候需要遍历比它自己小的整数,任何一个满足整除的情况则判断结束,否则打印这是一个素数的info,有了else的加持,整个例子的逻辑相当的“self-expressive”,如同伪代码一般的好理解而且相比在判断整除的时候设置标志值然后在函数的结尾处判断标志值决定是否打印数字时素数的消息,代码更简洁没有那么多要描述如何做的“过程式”准备工作。

ps: 大家可以把例子中的被注释代码运行对比下效果。

配合 try except错误控制使用

在异常处理语句中,else有相似的用法,当try代码块没有抛出任何的异常时,else语句块会被执行到。

def my_to_int(str_param):
  try:
    print int(str_param)
  except ValueError:
    print 'cannot convert {} to a integer'.format(str_param)
  else:
    print 'convert {} to integer successfully'.format(str_param)
 
my_to_int("123")
my_to_int("me123")
 
123
convert 123 to integer successfully
cannot convert me123 to a integer

如打印日志所示,在转换成功未发生错的的时候,else语句里的逻辑会被执行,当然这个例子可能并没有什么太多的实际的用处,但大致能说明else在错误处理中的用处:简化逻辑,避免使用一些标志值就能够准确把握是否发生错误的情况来做一些实际的操作(比如在保存数据的时候如果发生错误,在else语句块中进行rollback的操作,然后紧接着还能加上finally语句完成一些清理操作。

善用else语句块能够让我们编写出更加简明,更加接近自然语言的语义的代码,当然也会更加的pythonic,细微之处大家可以慢慢体会。

Python 相关文章推荐
跟老齐学Python之大话题小函数(1)
Oct 10 Python
Python运算符重载用法实例
May 28 Python
python简单实现旋转图片的方法
May 30 Python
深入解析Python中的urllib2模块
Nov 13 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
Oct 01 Python
python3利用venv配置虚拟环境及过程中的小问题小结
Aug 01 Python
python实现定时发送qq消息
Jan 18 Python
Python3 实现串口两进程同时读写
Jun 12 Python
Python3.9又更新了:dict内置新功能
Feb 28 Python
python中列表的含义及用法
May 26 Python
Python自动化测试中yaml文件读取操作
Aug 20 Python
python3中apply函数和lambda函数的使用详解
Feb 28 Python
Python实现简单多线程任务队列
Feb 27 #Python
如何在Python中编写并发程序
Feb 27 #Python
Python 多线程抓取图片效率对比
Feb 27 #Python
Python 的描述符 descriptor详解
Feb 27 #Python
简析Python的闭包和装饰器
Feb 26 #Python
Android应用开发中Action bar编写的入门教程
Feb 26 #Python
12步教你理解Python装饰器
Feb 25 #Python
You might like
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
PHP比你想象的好得多
2014/11/27 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
JavaScript中this详解
2015/09/01 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
Bootstrap中data-target 到底是什么
2017/02/14 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
javascript实现留言板功能
2020/02/08 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
python求斐波那契数列示例分享
2014/02/14 Python
python检测远程端口是否打开的方法
2015/03/14 Python
wxpython实现图书管理系统
2018/03/12 Python
python最长回文串算法
2018/06/04 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
Pandas的数据过滤实现
2021/01/15 Python
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
全球性的在线购物网站:Zapals
2017/03/22 全球购物
解释一下钝化(Swap out)
2016/12/26 面试题
求职者应聘的自我评价
2013/10/16 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书