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 相关文章推荐
Python3.x版本中新的字符串格式化方法
Apr 24 Python
在Python中使用__slots__方法的详细教程
Apr 28 Python
Python set常用操作函数集锦
Nov 15 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
Jul 11 Python
python队列Queue的详解
May 10 Python
基于python调用psutil模块过程解析
Dec 20 Python
GDAL 矢量属性数据修改方式(python)
Mar 10 Python
django模型动态修改参数,增加 filter 字段的方式
Mar 16 Python
python 实现图像快速替换某种颜色
Jun 04 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 Python
Python实现查找数据库最接近的数据
Jun 08 Python
Python join()函数原理及使用方法
Nov 14 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
德生PL550的电路分析
2021/03/02 无线电
一个多文件上传的例子(原创)
2006/10/09 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
2017/08/22 Javascript
深入理解Vue 的条件渲染和列表渲染
2017/09/01 Javascript
jQuery选择器之属性过滤选择器详解
2017/09/28 jQuery
vue-router实现编程式导航的代码实例
2019/01/19 Javascript
npm qs模块使用详解
2020/02/07 Javascript
[01:19:34]2014 DOTA2国际邀请赛中国区预选赛 New Element VS Dream time
2014/05/22 DOTA
pyv8学习python和javascript变量进行交互
2013/12/04 Python
Windows下安装python2.7及科学计算套装
2015/03/05 Python
Python中的time模块与datetime模块用法总结
2016/06/30 Python
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
python 将对象设置为可迭代的两种实现方法
2019/01/21 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
python飞机大战游戏实例讲解
2020/12/04 Python
flask框架中的cookie和session使用
2021/01/31 Python
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
StringBuilder和String的区别
2015/05/18 面试题
餐饮加盟计划书
2014/01/10 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
模范班主任事迹材料
2014/12/17 职场文书
关于倡议书的范文
2015/04/29 职场文书
鲁滨逊漂流记读书笔记
2015/06/26 职场文书
《为人民服务》教学反思
2016/02/20 职场文书