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 相关文章推荐
Tornado服务器中绑定域名、虚拟主机的方法
Aug 22 Python
解读Python编程中的命名空间与作用域
Oct 16 Python
python学习之matplotlib绘制散点图实例
Dec 09 Python
python贪婪匹配以及多行匹配的实例讲解
Apr 19 Python
python 实现登录网页的操作方法
May 11 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
Oct 15 Python
Django 在iframe里跳转顶层url的例子
Aug 21 Python
在pycharm中显示python画的图方法
Aug 31 Python
python PIL/cv2/base64相互转换实例
Jan 09 Python
python scatter函数用法实例详解
Feb 11 Python
浅谈pytorch中的BN层的注意事项
Jun 23 Python
大数据分析用java还是Python
Jul 06 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+oracle 分页类
2006/10/09 PHP
PHP开发不能违背的安全规则 过滤用户输入
2011/05/01 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
2014/06/12 PHP
关于php中一些字符串总结
2016/05/05 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
JavaScript delete操作符应用实例
2009/01/13 Javascript
js 浮动层菜单收藏
2009/01/16 Javascript
页面版文本框智能提示JS代码
2009/11/20 Javascript
jquery 根据name名获取元素的value值
2015/02/27 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
微信小程序 基础知识css样式media标签
2017/02/15 Javascript
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
Python中支持向量机SVM的使用方法详解
2017/12/26 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
ALDO加拿大官网:加拿大女鞋品牌
2018/12/22 全球购物
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
世界上最大的艺术社区:SAA
2020/12/30 全球购物
毕业生自荐信的主要内容
2013/10/29 职场文书
银行实习生的自我评价
2013/12/09 职场文书
学生感冒英文请假条
2014/02/04 职场文书
学生个人自我鉴定
2014/03/26 职场文书
培训班主持词
2014/03/28 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
2016大学生暑期社会实践心得体会
2016/01/14 职场文书
导游词之岳阳楼
2019/09/25 职场文书
 Python 中 logging 模块使用详情
2022/03/03 Python