For-else:Python中一个奇怪但有用的特性

For-else:Python中一个奇怪但有用的特性

导语

无论使用哪种编程语言,我们都会编写“if-else”语句,但是“for-else”呢?

对于许多语言来说,例如 C、C++ 和 Java,在一个循环后使用“else”是完全错误的。然而 Python 作为一门优雅的语言,拥有这个“奇怪但有用”的特性。如果使用得当,我们的代码会变得更加整洁。

本文将介绍 Python 中的“for-else”功能,并通过简单的示例说明如何正确地使用它。

有关“For-Else”功能的基础知识

当第一次遇到“for-else”这个特性时,它会看起来很奇怪而且难以理解(Python开发者主页君刚开始用到这个功能时,很容易误以为 else 缩进错了)。但实际上,它的用法却出乎意料的简单。一句话就足以说明:代码中的“else”块仅在循环中没有中断时执行。

听起来有点过于简单而显得不真实?让我们通过一个例子来看看:

leaders = ["Elon", "Tim", "Warren"]for i in leaders: if i == "Yang": print("Yang is a leader!") breakelse: 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!") breakelse: print("Not found Yang!")# Yang is a leader!

登录后复制

如上所示,由于leaders 列表中包含“Yang”,for 循环被中断,“else”块中的内容没有执行。

简而言之,for-else 特性本身并不难理解,但是正确而熟练地使用它并不容易。下面我们来介绍三种适合使用 for-else 特性的场景。

使用 For-Else 功能的 3 个场景

我们不一定必须在 Python 程序中使用 for-else 这一特性。老实说,没有它我们也可以做同样的事情,但是使用它可以使我们的代码更加优雅。

1.进行迭代并找出没有被标记的元素

迭代列表以查找特定的元素是使用循环的基本场景。通常当我们找到目标元素后,继续迭代是没有意义的,我们需要跳出循环。问题是:我们如何知道该元素是否被找到呢?

传统的解决方案是定义一个“标记”变量,并在我们找到特定项目时将其设置为 True。

leaders = ["Yang", "Elon", "Tim", "Warren"]have_yang = Falsefor i in leaders: if i == "Yang": have_yang = True # Do something breakif have_yang == False: # no yang ...# Do others

登录后复制

如上例所示,have_yang 变量就是一个标志。在 for 循环运行完成后,如果它的值是 False,我们就知道列表中没有“Yang”,而后可以做一些其他的操作。

这种方法已经足够好了,但是如果你想利用 Python 的“优雅”特性,使用 for-else 就是另一种选择:

leaders = ["Yang", "Elon", "Tim", "Warren"]for i in leaders: if i == "Yang": have_yang = True # Do something breakelse:# 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): continuebreak

登录后复制

如上所示,跳出嵌套循环有一点困难,因为我们必须知道内部循环是否被跳出。

上面的代码展示了一个笨拙的解决方案来确定内部循环是否已经中断。它当然可以正常工作,但我们可以通过使用 for-else 来使其更整洁:

# use the for-else syntaxfor 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.协助处理异常

nums = [1, 3, 0, 5]for denominator in nums: try: 20/denominator except ZeroDivisionError: breakelse:# no found ZeroDivisionError ...# Do others

登录后复制

如上所示,如果 for 循环中没有出现 ZeroDivisionError,我们可以在“else”块中进行相应的后续操作。

总结

Python 中的 for-else 特性乍一看会有些奇怪,但是它的用法并不难理解,并且在某些场景下可以发挥其用处。毕竟,我们只需要记住一条规则:“else”块仅在循环中没有中断时执行。

以上就是For-else:Python中一个奇怪但有用的特性的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2240937.html

(0)
上一篇 2025年2月26日 20:29:09
下一篇 2025年2月23日 10:45:00

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 手把手教你用装饰器扩展 Python 计时器

    这是我们手把手教你实现 Python 定时器的第三篇文章。前两篇:分别是手把手教你实现一个 Python 计时器​,和用上下文管理器扩展 Python 计时器​,使得我们的 Timer 类方便用、美观实用。 但我们并不满足于此,仍然有一个用…

    2025年2月26日
    200
  • 自动化测试:Python常见的几种编程模式

    本章节给大家更新一下“Python语法规范与数据类型”相关内容,主要是为了让大家了解Python有什么类型的编程模式,掌握Python的基本语法,清楚怎么输出及命令行参数的基本应用,对Python的数据类型了解后,以便做更多的相关操作。 常…

    2025年2月26日 编程技术
    200
  • 如何在Python中操作MySQL?

    一. Python 操作数据库介绍 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: Gad…

    2025年2月26日
    200
  • 当Python也来进行修图神器,发现是真的蛮好用的呢!!

    今天小编来和大家分享一下Python​在图像处理当中的具体应用,那既然是图像处理,那必然要提到opencv模块了,该模块支持与计算机视觉和机器学习相关的众多算法,并且应用领域正在日益扩展,大致有以下几种领域。 物体识别:通过视觉以及内部存储…

    2025年2月26日
    200
  • Python 的列表解析式是解决任务有效的方法吗?

    Python 是一种极其多样化和强大的编程语言!当需要解决一个问题时,它有着不同的方法。 列表解析式的优势 比循环更节省时间和空间。 需要更少的代码行。 可将迭代语句转换为公式。 如何在 Python 中创建列表 列表解析式是一种基于现有列…

    2025年2月26日
    200
  • 九个应知应会的单行Python代码

    当我们开始学习 Python 时,我们通常会优先编写能够完成工作的代码,而不会关注代码的可读性以及代码的简洁性和效率。 确切来说,这是完全没有问题的,但是有一些方法可以在不忽略可读性的情况下缩短我们的 Python 代码。单行 Python…

    2025年2月26日
    200
  • 利用Python打造一个语音合成系统

    正文 大家好,我是Python人工智能技术 背景 一直对语音合成系统比较感兴趣,总想能给自己合成一点内容,比如说合成小说,把我下载的电子书播报给我听等等。 语音合成系统 其实就是一个基于语音合成的工具,但是这个东西由于很多厂家都提供了API…

    2025年2月26日 编程技术
    200
  • Python 中的协程,到底是怎么回事?

    一.传统的Sync语法请求例子 还是一样, 在了解Async语法的实现之前, 先从一个Sync的语法例子开始, 现在假设有一个HTTP请求, 这个程序会通过这个请求获取对应的响应内容, 并打印出来, 代码如下: import socketd…

    2025年2月26日
    200
  • 太全了!用Python操作MySQL的使用教程集锦!

    一. python操作数据库介绍 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库:  Gad…

    2025年2月26日
    200
  • 一行代码,让你的 Python bug 与众不同

    PrettyErrors 是一个精简 Python 错误信息的工具,特点是界面十分简洁友好。 它最显著的功能是支持在终端进行彩色输出,标注出文件栈踪迹,发现错误信息,过滤掉冗余信息,提取出关键部分,并且进行彩色标注,从而提高开发者的效率。 …

    2025年2月26日 编程技术
    200

发表回复

登录后才能评论