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处理RSS、ATOM模块FEEDPARSER介绍
Feb 18 Python
Python中super()函数简介及用法分享
Jul 11 Python
shelve  用来持久化任意的Python对象实例代码
Oct 12 Python
Django+Ajax+jQuery实现网页动态更新的实例
May 28 Python
pytorch + visdom 处理简单分类问题的示例
Jun 04 Python
对python 生成拼接xml报文的示例详解
Dec 28 Python
python中类的输出或类的实例输出为这种形式的原因
Aug 12 Python
Python3 JSON编码解码方法详解
Sep 06 Python
Python 经典算法100及解析(小结)
Sep 13 Python
浅析python内置模块collections
Nov 15 Python
python中的split、rsplit、splitlines用法说明
Oct 23 Python
python产生模拟数据faker库的使用详解
Nov 04 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
php实现简单爬虫的开发
2016/03/28 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
javascript 进阶篇1 正则表达式,cookie管理,userData
2012/03/14 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
jQuery插件扩展测试实例
2016/06/21 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
2018/08/03 jQuery
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
使用vue.js在页面内组件监听scroll事件的方法
2018/09/11 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
[53:20]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 VG vs OG
2018/04/03 DOTA
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python 变量类型及命名规则介绍
2013/06/08 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
pycharm实现猜数游戏
2020/12/07 Python
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
美国时尚假发购物网站:Wigsbuy
2019/04/06 全球购物
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
区域销售经理岗位职责
2013/12/10 职场文书
经典促销广告词大全
2014/03/19 职场文书
团员自我评价范文
2015/03/10 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
部门主管竞聘书
2015/09/15 职场文书