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中实现迭代器(iterator)的方法示例
Jan 19 Python
python利用urllib和urllib2访问http的GET/POST详解
Sep 27 Python
python实现自主查询实时天气
Jun 22 Python
Windows下python3.6.4安装教程
Jul 31 Python
使用Python编写Prometheus监控的方法
Oct 15 Python
Python重新加载模块的实现方法
Oct 16 Python
python找出完数的方法
Nov 12 Python
Python中判断子串存在的性能比较及分析总结
Jun 23 Python
python中的decimal类型转换实例详解
Jun 26 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
Nov 21 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
plt.figure()参数使用详解及运行演示
Jan 08 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
利用php获取服务器时间的实现代码
2013/06/07 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
php实现的顺序线性表示例
2019/05/04 PHP
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
JS无限树状列表实现代码
2011/01/11 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
用示例说明filter()与find()的用法以及children()与find()的区别分析
2013/04/26 Javascript
HTML5之lang属性与dir属性的详解
2013/06/19 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
javascript去除空格方法小结
2015/05/21 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
通过实例解析js简易模块加载器
2019/06/17 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
wxPython使用系统剪切板的方法
2015/06/16 Python
python中如何使用朴素贝叶斯算法
2017/04/06 Python
浅析Python中的赋值和深浅拷贝
2017/08/15 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
python实现对象列表根据某个属性排序的方法详解
2019/06/11 Python
Python requests接口测试实现代码
2020/09/08 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
校园奶茶店创业计划书
2014/01/23 职场文书
七匹狼男装广告词
2014/03/21 职场文书
协议书样本
2014/04/23 职场文书
入党介绍人意见范文
2015/06/01 职场文书
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
室外天线与收音机天线杆接合方法
2022/04/05 无线电