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使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
OpenCV实现人脸识别
Apr 07 Python
Python编程实现线性回归和批量梯度下降法代码实例
Jan 04 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
anaconda如何查看并管理python环境
Jul 05 Python
决策树剪枝算法的python实现方法详解
Sep 18 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
May 29 Python
Python 实现一个计时器
Jul 28 Python
python3.7.3版本和django2.2.3版本是否可以兼容
Sep 01 Python
PyCharm中关于安装第三方包的三个建议
Sep 17 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
Jan 12 Python
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
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
PHP setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
Tinymce+jQuery.Validation使用产生的BUG
2010/03/29 Javascript
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
JS模板实现方法
2013/04/03 Javascript
基于javascript实现单选及多选的向右和向左移动实例
2015/07/25 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
node.js-v6新版安装具体步骤(分享)
2017/09/06 Javascript
vue-cli之router基本使用方法详解
2017/10/17 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
Python 2与Python 3版本和编码的对比
2017/02/14 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
python实现单链表的方法示例
2019/09/03 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
戴尔美国官网:Dell
2016/08/31 全球购物
阿拉伯书店:Jamalon
2019/07/24 全球购物
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android