3.5. 使用 else 子句简化循环(异常处理)

您所在的位置:网站首页 python的循环语句有哪些关键词 3.5. 使用 else 子句简化循环(异常处理)

3.5. 使用 else 子句简化循环(异常处理)

2024-07-08 02:09:27| 来源: 网络整理| 查看: 265

3.5. 使用 else 子句简化循环(异常处理)¶

有其他编程语言经验的程序员接触到Python时,对于它无所不在的 else 往往感到非常 惊讶。 在Python中,不仅分支语句有 else 子句,而且循环语句也有,甚至连异常处理也有。 首先来看者循环语句中的 else , 看看它们的语法。

while_stmt :: = "while" expression ":" suite

["else" ":"suite]

for_stmt :: = "for" target_list "in" expression_list " :", suite

["else" ":" suite]

从语法定义中可以看到如果没有 ["else" ":" suite] 这一块,Python的循环语句跟大多数语言并无二致。 要谈 else 子句,必须先从Python从其他语言中借鉴的语义相同的 break 语句说 起, 因为 else 子句提供了隐含的对循环是否由 break 语句引发循环结束的判断。

先来看一个没有使用 else 子句的例子:

>>> def print_p(n): >>> for i in range(2, n): >>> found = True >>> for j in range(2, i): >>> if i % j == 0: >>> found = False >>> break >>> if found: >>> print ("%d is a prime number"%i) >>> print_p(20) 2 is a prime number 3 is a prime number 5 is a prime number 7 is a prime number 11 is a prime number 13 is a prime number 17 is a prime number 19 is a prime number

这是一个査找素数的简单实现,可以看到我们借助了一个标志量 found 来判断是循环结束是不是由 break 语句引起的。

如果对 else 善加利用,代码可以简洁得多。来看下面的具体 实现:

>>> def print_prime2 (n) : >>> for i in range(2, n): >>> for j in range(2, i): >>> if i % j == 0: >>> break >>> else: >>> print ("%d is a prime number1"%i) >>> print_prime2(20) 2 is a prime number1 3 is a prime number1 5 is a prime number1 7 is a prime number1 11 is a prime number1 13 is a prime number1 17 is a prime number1 19 is a prime number1

当循环“自然”终结(循环条件为假)时 else 从句会被执行一次, 而当循环是由 break 语句中断时, else 子句就不被执行。 与 for 语句相似, while 语句中的 else 子句的语意是一样 的: else 块在循环正常结朿和循环条件不成立时被执行。

与C/C++等较为“老土”的语言相比, else 子句使程序员的生产力和代码的可读性都得到了提髙, 所以建议大家多使用 else ,让程序变得更加Pythcmic。

在Python的异常处理中,也提供了 else 子句语法。 这颗“语法糖”的意义跟循环语句中的 else 是相似的: try 块没有拋出任何异常时,执行 else 块。 按惯例先看一下如下语 法定义:

try_stmt ::= tryl_stmt | try2_stmt tryl_stmt ::= "try" ":" suite

("except" [expression [ ("as" | ",") target]]":" suite) +["else" ":" suite] ["finally" ":" suite]

try2_stmt ::= "try" ":" suite

"finally" ":" suite

从tryl_stmt的定义中可以看到,Python的异常处理中有一种try-except-else-finally形式。 下面的例子是把数据写入文件中。

>>> def save(db, obj): >>> try: >>> # save attrl >>> db.execute('a sql stmt', obj.attr1) >>> # save attr2 >>> db.execute('another sql stmt', obj.attr2) >>> except DBError: >>> db.rollback() >>> else: >>> db.commit ()

如果没有 else子 句,就像前文中关于循环的例子一样,需要引人一个标志变量。

>>> def save(db, obj): >>> some_error_occurred= False >>> try: >>> # save attrl >>> db.execute ( ' a sql stmt', obj.attr1) >>> # save attr2 >>> db.execute ('another sql stmt', obj.attr2) >>> except DBError: >>> db.rollback() >>> some_error_occurred = True >>> if not some_error_occurred: >>> db.commit ()

这样代码就变得复杂了。在Python中还有不少语法都是致力于让程序员可以编写更加 简明、更接近自然语言语义的代码。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭