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编写的微博应用
Oct 17 Python
python中利用Future对象异步返回结果示例代码
Sep 07 Python
启动targetcli时遇到错误解决办法
Oct 26 Python
Python数据结构与算法之字典树实现方法示例
Dec 13 Python
Python tornado队列示例-一个并发web爬虫代码分享
Jan 09 Python
Python 创建空的list,以及append用法讲解
May 04 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
Jul 19 Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 Python
python实现kNN算法识别手写体数字的示例代码
Aug 16 Python
Django的CVB实例详解
Feb 10 Python
在ipython notebook中使用argparse方式
Apr 20 Python
python对execl 处理操作代码
Jun 22 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数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
php实现的xml操作类
2016/01/15 PHP
PHP+iframe图片上传实现即时刷新效果
2016/11/18 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
javascript window.opener的用法分析
2010/04/07 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
JavaScript算法学习之冒泡排序和选择排序
2019/11/02 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
[54:17]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第二场 1月10日
2021/03/11 DOTA
跟老齐学Python之list和str比较
2014/09/20 Python
从Python程序中访问Java类的简单示例
2015/04/20 Python
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
python简单实现AES加密和解密
2019/03/28 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
服装创业计划书范文
2014/02/05 职场文书
个人自荐书范文
2015/03/09 职场文书
银行反洗钱宣传活动总结
2015/05/08 职场文书
2015年林业工作总结
2015/05/14 职场文书
毕业班班主任工作总结2015
2015/07/23 职场文书
初二英语教学反思
2016/02/15 职场文书
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js