python入门学习关于for else的特殊特性讲解


Posted in Python onNovember 20, 2021

不管我们使用哪种编程语言,我们都会写"if-else"语句,但是"for-else"怎么样呢?

对于许多语言,例如 c、 c + + 和 Java,如果在循环之后使用"else",那是完全错误的。然而,Python 作为一种优雅的语言,有这种奇怪但有用的特性。如果我们正确地使用它,我们的代码将变得更加整洁。

For-Else 特性的基础知识

当 Python 开发人员第一次遇到"for-else"特性时,它看起来很奇怪,很难理解。但事实上,它的用法出人意料地简单。一句话就足以解释这个问题:只有在循环中没有中断时,才会执行" else"块。

太简单以至于不真实? 让我们用一个例子来检验一下:

leaders = ["Elon", "Tim", "Warren"]
for i in leaders:
    if i == "Yang":
        print("Yang is a leader!")
        break
else:
    print("Not found Yang!")
# Not found Yang!

如上所示,列表 leaders 不包含“Yang”,因此 for 循环中没有中断。因此,"else"块执行并打印信息。

如果列表 leaders 中包括"Yang",将会发生什么?

leaders = ["Yang", "Elon", "Tim", "Warren"]
for i in leaders:
    if i == "Yang":
        print("Yang is a leader!")
        break
else:
    print("Not found Yang!")
# Yang is a leader!

如上所示,由于“Yang”位于 leaders 列表中,因此 for 循环被打破,而“else”块没有执行。

简而言之,for-else 特性并不难理解,但是正确而熟练地使用它并不容易。

使用 For-Else 特性的三个场景

我们不一定要在 Python 程序中使用 for-else 特性。说实话,没有它我们也可以做同样的事情,但是使用它可以使我们的代码更优雅。

1. 迭代并查找没有标志变量的项

通过迭代列表来查找特定项是使用循环的基本方案。通常,当我们找到项目时,继续迭代是没有意义的,我们需要打破循环。问题是: 我们如何知道这个项是否被找到?

传统的解决方案是定义一个“ flag”变量,并在找到特定项时将其设置为 True。

leaders = ["Yang", "Elon", "Tim", "Warren"]
have_yang = False
for i in leaders:
    if i == "Yang":
        have_yang = True
        # Do something
        break
if have_yang == False: # no yang
    ...  # Do others

这个方法已经足够好了,但是如果你想充分利用 Python 的优点。使用 for-else 特性是另一种选择:

leaders = ["Yang", "Elon", "Tim", "Warren"]
for i in leaders:
    if i == "Yang":
        have_yang = True
        # Do something
        break
else:  # no yang
    ...  # Do others

更加简单方便吧~

2. 帮助打破嵌套循环

当存在嵌套循环时,for-else 特性也可以提供帮助。

for i in range(5):
    for j in range(5):
        if j == 2 and i == 0:
            break
    if not (j == 2 and i == 0):
        continue
    break

如上所示,打破嵌套循环有点困难,因为我们必须知道内部循环是否被打破。

上面的代码显示了一个笨拙的解决方案,用于确定内部循环是否已经破坏。它当然可以工作,但是我们可以通过 for-else 特性使它更加整洁:

# use the for-else syntax
for i in range(5):
    for j in range(5):
        if j == 2 and i == 0:
            break
    else:  # only execute when it's no break in the inner loop
        continue
    break

3. 帮助处理异常

异常处理对于编程非常重要,如果我们正确地使用 for-else 特性,它也会很有帮助。例如:

nums = [1, 3, 0, 5]
for denominator in nums:
    try:
        20/denominator
    except ZeroDivisionError:
        break
else:  # no found ZeroDivisionError
    ...  # Do others

如上所示,如果 for 循环中没有 ZeroDivisionError,我们可以在“ else”块中执行相应的操作。

总结

Python 中的 for-else 特性起初看起来很奇怪。但是这并不难理解,而且在某些情况下非常有用。毕竟,我们只需要记住一句话的规则:只有在循环中没有中断时,才会执行“ else”块。

以上就是python入门学习关于for else的特殊特性讲解的详细内容,更多关于python中for else特殊特性的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python 提取文件的小程序
Jul 29 Python
python 中文字符串的处理实现代码
Oct 25 Python
python实现DNS正向查询、反向查询的例子
Apr 25 Python
python如何在终端里面显示一张图片
Aug 17 Python
Python中pillow知识点学习
Apr 30 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
Jun 09 Python
Python中GeoJson和bokeh-1的使用讲解
Jan 03 Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 Python
Numpy之reshape()使用详解
Dec 26 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
Dec 08 Python
Python爬虫实现selenium处理iframe作用域问题
Jan 27 Python
Python标准库pathlib操作目录和文件
Nov 20 #Python
python数据可视化使用pyfinance分析证券收益示例详解
python编程学习使用管道Pipe编写优化代码
Nov 20 #Python
python自动化测试通过日志3分钟定位bug
Nov 20 #Python
Python实现位图分割的效果
python脚本框架webpy模板赋值实现
python脚本框架webpy模板控制结构
Nov 20 #Python
You might like
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
PHP通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
2017/05/05 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
2011/07/28 Javascript
javascript继承之为什么要继承
2012/11/10 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
常用的JS验证和函数汇总
2014/12/23 Javascript
Javascript 高阶函数使用介绍
2015/06/15 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
JS 仿支付宝input文本输入框放大组件的实例
2017/11/14 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
ES6 Promise对象的含义和基本用法分析
2019/06/14 Javascript
Python标准库与第三方库详解
2014/07/22 Python
Python使用Flask框架获取当前查询参数的方法
2015/03/21 Python
Python解析树及树的遍历
2016/02/03 Python
Numpy数组的保存与读取方法
2018/04/04 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
深入了解canvas在移动端绘制模糊的问题解决
2019/04/30 HTML / CSS
德国BA保镖药房韩文网:kr.ba.de
2017/09/04 全球购物
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
Java如何读取CLOB字段
2013/10/10 面试题
端午节粽子促销活动方案
2014/02/02 职场文书
品质口号大全
2014/06/17 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS