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中操作文件之read()方法的使用教程
May 24 Python
python实现简单socket通信的方法
Apr 19 Python
使用Python对Csv文件操作实例代码
May 12 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
Sep 08 Python
利用python3随机生成中文字符的实现方法
Nov 24 Python
对Python3中bytes和HexStr之间的转换详解
Dec 04 Python
python3使用matplotlib绘制散点图
Mar 19 Python
浅谈python中get pass用法
Mar 19 Python
Python3 Tkinter选择路径功能的实现方法
Jun 14 Python
django模型动态修改参数,增加 filter 字段的方式
Mar 16 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
May 15 Python
Python 机器学习工具包SKlearn的安装与使用
May 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
eAccelerator的安装与使用详解
2013/06/13 PHP
比较完整的微信开发php代码
2016/08/02 PHP
PHP类型约束用法示例
2016/09/28 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
Alliance vs Liquid BO3 第一场2.13
2021/03/10 DOTA
Jquery插件之多图片异步上传
2010/10/20 Javascript
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
2010/10/22 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
vue.js将unix时间戳转换为自定义时间格式
2017/01/03 Javascript
实时监控input框,实现输入框与下拉框联动的实例
2018/01/23 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
python获取指定时间差的时间实例详解
2017/04/11 Python
基于python实现学生管理系统
2018/10/17 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
2019/01/14 Python
python的pstuil模块使用方法总结
2019/07/26 Python
python利用7z批量解压rar的实现
2019/08/07 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
2020/02/27 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
美国市场上最实惠的送餐服务:Dinnerly
2018/03/18 全球购物
应届生简历中的自我评价
2014/01/13 职场文书
初中生评语大全
2014/04/24 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
2015年学校体育工作总结
2015/04/22 职场文书
清明扫墓感想
2015/08/11 职场文书
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技