返回顶部
首页 > 资讯 > 后端开发 > Python >For-else:Python中一个奇怪但有用的特性
  • 591
分享到

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

PythonFor-else 2023-05-14 21:05:32 591人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

导语无论使用哪种编程语言,我们都会编写“if-else”语句,但是“for-else”呢?对于许多语言来说,例如 C、c++ 和 Java,在一个循环后使用“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!")
 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!

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

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

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

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

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

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

传统的解决方案是定义一个“标记”变量,并在我们找到特定项目时将其设置为 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

如上例所示,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
 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.协助处理异常

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”块仅在循环中没有中断时执行。

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

--结束END--

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

本文链接: https://lsjlt.com/news/205706.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • For-else:Python中一个奇怪但有用的特性
    导语无论使用哪种编程语言,我们都会编写“if-else”语句,但是“for-else”呢?对于许多语言来说,例如 C、C++ 和 Java,在一个循环后使用“else”是完全错误的。然而 Python 作为一门优雅的语言,拥有这个“奇怪但有...
    99+
    2023-05-14
    Python For-else
  • 分析MySQL中FTWRL一个奇怪的堵塞现象
    本篇内容介绍了“分析MySQL中FTWRL一个奇怪的堵塞现象”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
  • 怎么用Java创建一个LOL中的英雄类和怪物类
    本篇内容主要讲解“怎么用Java创建一个LOL中的英雄类和怪物类”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Java创建一个LOL中的英雄类和怪物类”吧!Java习题第一题题目:创建一个...
    99+
    2023-06-27
  • css一些不常见但很有用的属性操作示例
    这篇文章主要为大家展示了css一些不常见但很有用的属性操作示例,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“css一些不常见但很有用的属性操作示例”这篇文章吧。自定义文本选择::selec ...
    99+
    2023-06-08
  • JavaScript中有用的特性是什么
    这篇文章主要讲解了“JavaScript中有用的特性是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中有用的特性是什么”吧!String.padStart() 和 S...
    99+
    2023-07-05
  • 过去五年里,JavaScript中的一些超级有用的特性!
    例子:let originalString = 'Script'; let paddedString = originalString.padStart(7, 'Java'); console.log(p...
    99+
    2023-05-14
    javascript
  • PHP7.x中每一个版本的新特性是什么
    这篇文章主要为大家展示了“PHP7.x中每一个版本的新特性是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“PHP7.x中每一个版本的新特性是什么”这篇文章吧。PHP 7.0标量类型声明什么是...
    99+
    2023-06-15
  • vue3中的custom renderer特性有什么用
    本篇内容主要讲解“vue3中的custom renderer特性有什么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue3中的custom renderer特性有什么用”吧!默认的目标渲染平...
    99+
    2023-06-20
  • 详解Python中元组的三个不常用特性
    目录1. 引言2. 举个栗子3. 创建包含单一元素的元组4. 使用下划线和*来unpack元组5. 使用命名元组6. 总结1. 引言 元组是Python中一种重要的内置数据类型。与列...
    99+
    2024-04-02
  • js如何使用for in循环获取一个对象的所有属性以及值
    小编给大家分享一下js如何使用for in循环获取一个对象的所有属性以及值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!实例如下...
    99+
    2024-04-02
  • Java中使用stream流进行List对象的特定属性合并另一属性(包括单个属性以及两个属性的合并求和以及没有属性的合并求和)
    声明:代码段仅用来表达含义,如有不标准的地方请见谅。 首先建立一个测试类: @Data@AllArgsConstructor@NoArgsConstructorpublic class Person { //id private...
    99+
    2023-09-02
    java 开发语言
  • Vue3 style中新增的特性有哪些及怎么用
    三、插槽选择器默认情况下,作用域样式不会影响到 <slot/> 渲染出来的内容,因为它们被认为是父组件所持有并传递进来的。使用 :slotted 伪类以确切地将插槽内容作为选择器的目标:<style scoped> ...
    99+
    2023-05-14
    Vue3 style
  • HTML5中一些酷炫又有趣的新特性代码整理汇总
    目录一、详情标签二、内容可编辑三、地图四、标记内容五、data-* 属性六、输出标签七、数据列表八、范围(滑块)九、Meter十、Inputs必需的自动对焦使用正则表达式验证颜色选择...
    99+
    2023-02-25
    html5有趣的新特性 html5有哪些新特征
  • JavaScript如何使用for-in遍历一个对象内部属性的时候注意检查属性
    小编给大家分享一下JavaScript如何使用for-in遍历一个对象内部属性的时候注意检查属性,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!使用for-in遍历一个对象内部属性的时候注意...
    99+
    2024-04-02
  • Python中进行特征重要性分析的9个常用方法
    特征重要性分析用于了解每个特征(变量或输入)对于做出预测的有用性或价值。目标是确定对模型输出影响最大的最重要的特征,它是机器学习中经常使用的一种方法。 为什么特征重要性分析很重要 如果有一个包含数十...
    99+
    2023-09-18
    python 机器学习 特征工程
  • css怎么在一个声明中定义所有的列表属性
    这篇文章将为大家详细讲解有关css怎么在一个声明中定义所有的列表属性,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。<html> <head> &l...
    99+
    2024-04-02
  • 详解ASP.NET控件中十个最有用的属性
    1. ID属性:每个ASP.NET控件都必须具有一个唯一的ID属性,用于在代码中引用该控件。2. Visible属性:控制控件是否可...
    99+
    2023-09-22
    ASP.NET
  • html5中返回一个MediaError对象的属性error怎么用
    这篇文章给大家分享的是有关html5中返回一个MediaError对象的属性error怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实例获得视频的错误状态:myVid=do...
    99+
    2024-04-02
  • css中怎么实现所有针对列表的属性设置于一个简写属性
    这篇文章主要为大家展示了“css中怎么实现所有针对列表的属性设置于一个简写属性”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css...
    99+
    2024-04-02
  • Go语言的高并发特性在云计算中的应用有哪些?
    随着互联网技术的不断发展,对高性能、高并发的要求也越来越高。为满足这种需求,Go语言应运而生。Go语言是Google推出的一种全新的编程语言,特别适合处理高并发的网络服务,被广泛应用在云计算、Web后端、分布式系统等领域。本文将探讨Go语言...
    99+
    2023-05-17
    Go语言 云计算 高并发。
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作