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监控网卡流量并使用graphite绘图的示例
Apr 27 Python
python使用pil生成图片验证码的方法
May 08 Python
利用Python实现网络测试的脚本分享
May 26 Python
python 垃圾收集机制的实例详解
Aug 20 Python
Python正则表达式知识汇总
Sep 22 Python
python 接口测试response返回数据对比的方法
Feb 11 Python
python 将md5转为16字节的方法
May 29 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
python中的itertools的使用详解
Jan 13 Python
python动态文本进度条的实例代码
Jan 22 Python
Ubuntu权限不足无法创建文件夹解决方案
Nov 14 Python
python mongo 向数据中的数组类型新增数据操作
Dec 05 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
Laravel5中contracts详解
2015/03/02 PHP
PHP读书笔记整理_结构语句详解
2016/07/01 PHP
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
javascript动态创建表格及添加数据实例详解
2015/05/13 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
js实现添加删除表格(两种方法)
2017/04/27 Javascript
Vue.js tab实现选项卡切换
2017/05/16 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
nginx配置React静态页面的方法教程
2017/11/03 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
python读取与处理netcdf数据方式
2020/02/14 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
英国折扣高尔夫商店:Discount Golf Store
2019/11/19 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
小学家长会邀请函
2014/01/23 职场文书
幼儿园庆六一游园活动方案
2014/01/29 职场文书
《蒙娜丽莎之约》教学反思
2014/02/27 职场文书
常务副总经理岗位职责
2014/04/12 职场文书
卖车协议书范例
2014/09/16 职场文书
四风自我剖析材料
2014/09/30 职场文书
离婚被告代理词
2015/05/23 职场文书
Python实现简繁体转换
2021/06/07 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python