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每隔N秒运行指定函数的方法
Mar 16 Python
Python中字符串的修改及传参详解
Nov 30 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
Sep 08 Python
简单实现Python爬取网络图片
Apr 01 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
Apr 08 Python
python爬取网页转换为PDF文件
Jun 07 Python
Tensorflow 查看变量的值方法
Jun 14 Python
解决python opencv无法显示图片的问题
Oct 28 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
Apr 11 Python
Python如何用wx模块创建文本编辑器
Jun 07 Python
python+requests实现接口测试的完整步骤
Oct 27 Python
python实现企业微信定时发送文本消息的示例代码
Nov 24 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代码把全角数字转为半角数字
2007/12/10 PHP
PHP的魔术常量__METHOD__简介
2014/07/08 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
2014/08/11 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
JavaScript静态的动态
2006/09/18 Javascript
动态加载js文件 document.createElement
2006/10/14 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
2015/09/02 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
2016/07/28 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
关于AngularJS中几种Providers的区别总结
2020/05/17 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
2020/08/07 Javascript
vue常用高阶函数及综合实例
2021/02/25 Vue.js
python中文乱码的解决方法
2013/11/04 Python
python模拟鼠标拖动操作的方法
2015/03/11 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
详解python:time模块用法
2019/03/25 Python
Python调用JavaScript代码的方法
2020/10/27 Python
python pillow库的基础使用教程
2021/01/13 Python
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
美国最受欢迎的度假目的地优惠套餐:BookVIP
2018/09/27 全球购物
联强国际笔试题面试题
2013/07/10 面试题
《囚绿记》教学反思
2014/03/01 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
学校爱国卫生月活动总结
2014/06/25 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
单位综合评价意见
2015/06/05 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书
电力培训学习心得体会
2016/01/11 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python