Python for...else... 语句

逻辑棱镜
• 阅读 3872

条件语句在编程语言中再寻常不过了,只要你需要编写程序,那么几乎一定会用到 if ... else ... 这样的条件语句进行条件判断。所以通用编程语言都会提供 if ... else ... 这样的语法。Python 也不例外,不过 Python 不只有 if ... else ... 这样的语法,它还提供了 for ... else ...、try ... except ... else ... 等这样的语法。今天我们只讨论 for ... else ... 语法,来看看 Python 的 else 语句跟在 for 后面与跟在 if 后面有什么异同。

先看一段代码示例:

for i in [1, 2, 3]:
    print(i)
else:
    print('done')

执行结果:

1
2
3
done

如果不执行这段代码,只看这段代码的写法,也许你会猜测它的执行结果应该只有 1、2、3 三个数,而没有 done。因为在 if ... else ... 的逻辑里,如果 if 的条件为真,那么就不会执行 else 语句下的代码块。
但根据打印结果来看,显然不符合我们的预期。带着疑问,我们再看下面一段示例代码:

for i in []:
    print(i)
else:
    print('done')

执行结果:

done

这次的结果只有一个 done,貌似这段代码看起来更合理些。因为 for 遍历的列表为空,所以条件不成立,那么就该执行 else 的逻辑,真的是这样吗?我们接着看下面示例。
我们知道 for 语句块中可以出现 continuebreak 两个关键字,那么我们先来测试一下,如果 for 语句块中包含 continue 会是什么结果。

for i in [1, 2, 3]:
    if i == 2:
        continue
    print(i)
else:
    print('done')

执行结果:

1
3
done

这个结果和第一段代码示例差不多,只不过在 i == 2 的时候,跳过了本次循环,继续执行下一次循环。
最后我们再来看看如果 for 语句块中包含 break 会出现什么结果。

for i in [1, 2, 3]:
    if i == 2:
        break
    print(i)
else:
    print('done')

执行结果:

1

根据上面这段代码的打印结果,我想你也许已经明白了 Python 中 for ... else ... 语句的执行特点。没错,实际上如果按照 if ... else ... 是互斥的逻辑来理解 for ... else ...,那么其实 for 语句块内部的 break 才真正跟 else 是一对条件语句。
如果 for 循环中执行了 break 语句,那么就不会再执行 else 语句块内部的代码了。

知道了 Python 的 for ... else ... 语句的语法,但是它有什么用呢?我最开始接触 for ... else ... 语句的时候觉得它完全没用,以至于我写了很久的 Python 代码都没有用到过,甚至几乎已经忘记了 Python 提供的这个语法。直到我开始写 ERP 项目的时候,我才发现 for ... else ... 的真正用途。因为写 ERP 系统会遇到各种复杂的业务需求,如果能够用 for ... else ... 解决问题,代码逻辑看起来就会清晰不少,这大大增加了项目的可维护性。

假如用 for 循环遍历一个可迭代对象,如果可迭代对象内部有一个元素符合条件,那么就执行一个逻辑,然后 break 掉,如果全部都不符合,就执行 else 的语句去执行另一个逻辑,示例代码如下:

for i in 可迭代对象:
    if 条件判断:
        执行一个逻辑
        break
else:
    执行另一个逻辑

这种代码显然比下面这种不用 for ... else ... 的写法可读性更强,并且更加符合 Pythonic 的写法。

flag = False
for i in 可迭代对象:
    if 条件判断:
        执行一个逻辑
        flag = True
        break

if not flag:
    执行另一个逻辑

以上,就是我对 for ... else ... 的理解以及使用体会,希望在你遇到同样的问题时,能够对你有所帮助。

点赞
收藏
评论区
推荐文章
CuterCorley CuterCorley
4年前
C语言入门系列之5.循环控制结构程序
@一、概述循环结构是程序中一种很重要的结构。其特点是:在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言提供了多种循环语句,可以组成各种不同形式的循环结构:goto语句和if语句构成循环;while语句;dowhile语句;for语句。二、got
Stella981 Stella981
3年前
Python小白零基础入门 —— 条件语句和循环语句
Python小白零基础入门——条件语句和循环语句点击上方“Python读数”,选择“星标”公众号重磅干货,第一时间送达Python零基础入门的第五篇文章,给大家介绍一下Python中的条件语句和循环语句。条件语句编程时经常需要检查一系列条件,并据此决定采取什
Stella981 Stella981
3年前
JQuery中对option的添加、删除、取值
jQuery获取Select选择的Text和Value:1\.$("select\_id").change(function(){//code...});  //为Select添加事件,当选择其中一项时触发2\.varcheckText$("select\_id").find("option:selected").text();  
Stella981 Stella981
3年前
Python中循环及判断语句
循环判断条件是编程语言中一个很重要的部分,python也不例外,循环判断条件一般结合continue,return,break关键字来判断,这些关键字用法与java中基本一致一、if判断语句判断条件返回的结果为布尔值,在python中,布尔值为True/False,首字母必须大写,否则将出现如下异常!(https://oscimg.oschi
Wesley13 Wesley13
3年前
MySQL · 性能优化 · MySQL常见SQL错误用法
1\.LIMIT语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般DBA想到的办法是在type,name,create\_time字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。SELECTFROMoperationWHEREty
Wesley13 Wesley13
3年前
Java入门(五):控制流程
在Java中,使用条件语句和循环结构确定控制流程,在本文中,主要包括块作用域、条件语句、循环结构、中断循环这四部分。一、块作用域块,也叫复合语句,是指由一对大括号括起来的若干条Java语句。块决定了变量的作用域。一个块可以嵌套多个块。二、条件语句如果判断超过三层,建议拆分开来写,这样更加清晰。packagejav
Stella981 Stella981
3年前
JavaScript if 条件语句
JavaScriptif条件语句使用:if(条件){}elseif(条件){}elseif(条件){}else{}示例://判断相等if(11){}//判断不等if(1!1){}//
小万哥 小万哥
1年前
Python 条件和 if 语句
Python支持来自数学的通常逻辑条件:等于:ab不等于:a!b小于:a<b小于或等于:ab大于或等于:ab这些条件可以以多种方式使用,最常见的是在"if语句"和循环中使用。if语句是使用if关键字编写的。示例,if语句:pythona33b200ifba
小万哥 小万哥
1年前
C 语言教程:条件和 if...else 语句
C语言中的条件和if...else语句您已经学习过C语言支持数学中的常见逻辑条件:小于:a<b小于或等于:ab大于或等于:ab等于:ab不等于:a!b您可以使用这些条件来根据不同的决策执行不同的操作。C语言具有以下条件语句:使用if来指定要执行的代码块,如
小万哥 小万哥
1年前
深入解析 C 语言中的 for 循环、break 和 continue
C语言中的for循环当您确切地知道要循环执行代码块的次数时,可以使用for循环而不是while循环cfor(语句1;语句2;语句3)//要执行的代码块语句1在执行代码块之前执行(一次)。语句2定义执行代码块的条件。语句3在执行代码块后执行(每次)。下面的示
曹训 曹训
11个月前
3:Python条件语句
1.if基本语句if条件:内部代码块内部代码块else……print('……')2.if支持嵌套if11:if22print(n1)print(n2)else:print(n3)else:print(n4)3.ifelifinpinput('请输入会员级别
逻辑棱镜
逻辑棱镜
Lv1
看雪在手中融化,城市变白。
文章
8
粉丝
0
获赞
0