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中用memcached来减少数据库查询次数的教程
Apr 07 Python
基于Python如何使用AIML搭建聊天机器人
Jan 27 Python
利用Python读取文件的四种不同方法比对
May 18 Python
Python多层装饰器用法实例分析
Feb 09 Python
Flask web开发处理POST请求实现(登录案例)
Jul 26 Python
python3利用Socket实现通信的方法示例
May 06 Python
python 一个figure上显示多个图像的实例
Jul 08 Python
pytorch下使用LSTM神经网络写诗实例
Jan 14 Python
python如何基于redis实现ip代理池
Jan 17 Python
Python中Selenium库使用教程详解
Jul 23 Python
Python类class参数self原理解析
Nov 19 Python
Python3.9.1中使用split()的处理方法(推荐)
Feb 07 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安装全攻略:APACHE
2006/10/09 PHP
在php中使用sockets:从新闻组中获取文章
2006/10/09 PHP
PHP下用rmdir实现删除目录的三种方法小结
2008/04/20 PHP
PHP中通过加号合并数组的一个简单方法分享
2011/01/27 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
使用vant的地域控件追加全部选项
2020/11/03 Javascript
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
浅谈Python 对象内存占用
2016/07/15 Python
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
Sanic框架流式传输操作示例
2018/07/18 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
中青班党性分析材料
2014/02/16 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
办公室主任个人总结
2015/02/28 职场文书
大学四年个人总结
2015/03/03 职场文书
水电施工员岗位职责
2015/04/11 职场文书
2015年保险公司工作总结
2015/04/24 职场文书
病假条格式范文
2015/08/17 职场文书
会计专业自荐信范文
2019/05/22 职场文书
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js