python入门学习关于for else的特殊特性讲解

目录
  • For-Else 特性的基础知识
  • 使用 For-Else 特性的三个场景
    • 1. 迭代并查找没有标志变量的项
    • 2. 帮助打破嵌套循环
    • 3. 帮助处理异常
  • 总结

不管我们使用哪种编程语言,我们都会写"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特殊特性的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python的for和break循环结构中使用else语句的技巧

    在Python中的while或者for循环之后还可以有else子句,作用是for循环中if条件一直不满足,则最后就执行else语句. for i in range(5): if i == 1: print 'in for' else: print 'in else' print 'after for-loop' # in for # in else # after for-loop 但我们发现if条件在循环的过程中成立了,最终还是执行了else语句里的内容,这是为什么呢? 好的,我们这时看下面这

  • Python for循环搭配else常见问题解决

    这篇文章主要介绍了Python for循环搭配else常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 假设有如下代码: for i in range(10): if i == 5: print 'found it! i = %s' % i else: print 'not found it ...' 你期望的结果是,当找到5时打印出 found it! i = 5 实际上打印出来的结果为: found it! i = 5 not f

  • Python中for后接else的语法使用

    0.背景 今天看到了一个比较诡异的写法,for后直接跟了else语句,起初还以为是没有缩进好,查询后发现果然有这种语法,特此分享.之前写过c++和Java,在for后接else还是第一次见. 1.试验 # eg1 import numpy as np for i in np.arange(5): print i else: print("hello?") # 0 # 1 # 2 # 3 # 4 # hello? 可以发现,在for正常结束后,break中的语句进行了执行. # eg2

  • Python中非常实用的一些功能和函数分享

    在使用Python多年以后,我偶然发现了一些我们过去不知道的功能和特性.一些可以说是非常有用,但却没有充分利用.考虑到这一点,我编辑了一些你应该了解的Python功能特色. 带任意数量参数的函数 你可能已经知道了Python允许你定义可选参数.但还有一个方法,可以定义函数任意数量的参数. 首先,看下面是一个只定义可选参数的例子 复制代码 代码如下: def function(arg1="",arg2=""):     print "arg1: {0}&qu

  • Python中在for循环中嵌套使用if和else语句的技巧

    for...[if]...构建List (List comprehension) 1.简单的for...[if]...语句 Python中,for...[if]...语句一种简洁的构建List的方法,从for给定的List中选择出满足if条件的元素组成新的List,其中if是可以省略的.下面举几个简单的例子进行说明. >>> a=[12, 3, 4, 6, 7, 13, 21] >>> newList = [x for x in a] >>> newL

  • python入门学习关于for else的特殊特性讲解

    目录 For-Else 特性的基础知识 使用 For-Else 特性的三个场景 1. 迭代并查找没有标志变量的项 2. 帮助打破嵌套循环 3. 帮助处理异常 总结 不管我们使用哪种编程语言,我们都会写"if-else"语句,但是"for-else"怎么样呢? 对于许多语言,例如 c. c + + 和 Java,如果在循环之后使用"else",那是完全错误的.然而,Python 作为一种优雅的语言,有这种奇怪但有用的特性.如果我们正确地使用它,我们

  • Python入门学习之类的相关知识总结

    前言 Python是面向对象的程序设计(Object Oriented Programming). 面向对象的程序设计的一条基本原则是: 计算机程序由多个能够起到子程序作用的单元或者对象组合而成. 面向对象的程序设计的一个关键性概念是: 数据以及数据的操作(即函数方法)封装在一起. 这个概念对于接触C++的我来说已经很熟悉了.就是"类"Class. Python完全支持所有面向对象的基本功能,比如: "封装"."继承"."多态"

  • Python入门学习Python流处理过程

    目录 Faust是一个流处理库 将kafka流中的思想移植到Python中 agent是一个async def的函数,因此它还可以异步执行其他操作 使用Kafka topic作为"预写日志" Faust支持任何类型的流数据 Faust是静态类型的 Faust简介 高可用性 分布式的 快速 灵活性 安装 绑定 下载并从源文件中安装 使用开发版本 常见问题 Faust是一个流处理库 将kafka流中的思想移植到Python中 它被用于Robinhood去构建高性能的分布式系统和实时数据通道

  • Python入门学习之Python流处理过程

    目录 Faust简介 高可用性 分布式的 快速 灵活性 安装 绑定 下载并从源文件中安装 使用开发版本 常见问题 Faust是一个流处理库,将kafka流中的思想移植到Python中 它被用于Robinhood去构建高性能的分布式系统和实时数据通道,每天处理数十亿的数据. Faust同时提供流处理和事件处理同类型的工具分享例如:Kafka Streams, Apache Spark/Storm/Samza/Flink 它不需要使用一个DSL,仅需要用到Python!这意味着你在做流处理的时候可以

  • ​​​​​​​Python 入门学习之函数式编程

    目录 前言 把函数作为对象 把对象作为函数 数据结构内的函数 把函数作为参数和返回值 嵌套函数 单表达式函数(Lambda 表达式) Map.Filter 和 Reduce Map Filter Reduce 前言 本文对 Python 中的函数式编程技术进行了简单的入门介绍. 在 Python 中,函数是「头等公民」(first-class).也就是说,函数与其他数据类型(如 int)处于平等地位. 因而,我们可以将函数赋值给变量,也可以将其作为参数传入其他函数,将它们存储在其他数据结构(如

  • python入门学习之自带help功能初步使用示例

    目录 python help使用 modules keywords symbols python help使用 C:\Users\wusong>python Python 3.8.2rc1 (tags/v3.8.2rc1:8623e68, Feb 11 2020, 10:46:21) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or &qu

  • Python入门学习指南分享

    对于初学者,入门至关重要,这关系到初学者是从入门到精通还是从入门到放弃.以下是结合Python的学习经验,整理出的一条学习路径,主要有四个阶段 NO.1 新手入门阶段,学习基础知识 总体来讲,找一本靠谱的书,由浅入深,边看边练. 网上的学习教程有很多,多到不知道如何选择.所有教程在基础知识介绍方面都差不多,区别在于讲的是否足够细(例如运行原理)以及是否有足够的练习.目前推荐大家看书<Python编程 从入门到实践> ,作者是美国教师,内容从基础知识开始,循序渐进,层层深入,适合零基础者.课程内

  • Python入门学习之字符串与比较运算符

    Python字符串 字符串或串(String)是由数字.字母.下划线组成的一串字符. 一般记为 : s="a1a2···an"(n>=0) 它是编程语言中表示文本的数据类型. python的字串列表有2种取值顺序: 从左到右索引默认0开始的,最大范围是字符串长度少1 从右到左索引默认-1开始的,最大范围是字符串开头 如果你的实要取得一段子串的话,可以用到变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾. 比如:

  • python入门学习笔记分享

    一.python的基础语法 1.行连接的方法是最后加上一个'\' 2.注释:多行注释三引号,#行注释:三引号定义的字符串原样输出(保存原格式) 3.I/O语句:用逗号分隔零个或多个表达式.(+)只能连接相同的数据类型.input的返回值永远字符串格式(要需要什么格式需要强制转换).格式输出str.rjust()str靠右:str.ljust() str靠左:str.center()字符串居中:str.format()方法,{}和:来替代%的方式:位置参数(索引0开头)(*列表形式) 4.填充方式

  • 一份python入门应该看的学习资料

    网上学习的时候总会遇到一些好的文章,分享给大家,也谢谢作者的分享. Python 简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构. Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节.类似于PHP和Perl语言. Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序. P

随机推荐