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实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
Python的动态重新封装的教程
Apr 11 Python
hmac模块生成加入了密钥的消息摘要详解
Jan 11 Python
详解tensorflow载入数据的三种方式
Apr 24 Python
对IPython交互模式下的退出方法详解
Feb 16 Python
使用pycharm在本地开发并实时同步到服务器
Aug 02 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
通过实例解析python描述符原理作用
Jan 22 Python
Python爬虫实现模拟点击动态页面
Mar 05 Python
keras 自定义loss层+接受输入实例
Jun 28 Python
Python自动化xpath实现自动抢票抢货
Sep 19 Python
python查询MySQL将数据写入Excel
Oct 29 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
模仿OSO的论坛(四)
2006/10/09 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
2017/10/17 PHP
php实现微信发红包功能
2018/07/13 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
javascript 控制 html元素 显示/隐藏实现代码
2009/09/01 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
jQuery+ajax读取json数据并按照价格排序示例
2018/03/28 jQuery
vue基于viewer实现的图片查看器功能
2019/04/12 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
基于tensorflow加载部分层的方法
2018/07/26 Python
django富文本编辑器的实现示例
2019/04/10 Python
Python 编程速成(推荐)
2019/04/15 Python
python 提取文件指定列的方法示例
2019/08/07 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
浅析HTML5页面元素及属性
2021/01/20 HTML / CSS
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
护理职业应聘自荐书
2013/09/29 职场文书
小学生元旦广播稿
2014/02/21 职场文书
工程建设实施方案
2014/03/14 职场文书
优秀员工评优方案
2014/06/13 职场文书
服务标语大全
2014/06/18 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
幸福来敲门观后感
2015/06/04 职场文书
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL