美文网首页
02-Python中的for-else语句

02-Python中的for-else语句

作者: 墨雨love薏雪 | 来源:发表于2019-01-30 23:55 被阅读7次

一、引言

《Python Algorithms 2nd》这本书在第 18 页有这样一段代码:

def sort_w_check(seq):
    n = len(seq)
    for i in range(n-1):
        if seq[i] > seq[i+1]
            break
    else:
        return
    ...

上述代码,是用来进行排序的,其中排序的内容以... 代替省略了,我们主要观察前面一段代码。
其中 for 循环中依次进行了元素的比较,当发现有前一个元素的值大于了后一个元素的值,就执行 break 退出 for 循环。

问题是,for循环后的else有什么作用?

二、探索

1.试验01

# 单独运行下面代码
else:

发现报错,说明else:是不能单独存在的。

File “”, line 1
else:
^
SyntaxError: invalid syntax

2.试验02

for i in range(3):
    print(i)
else:
    print('lwd love ydd')

运行结果如下:

0
1
2
lwd love ydd

得出结论:

for 循环正常执行结束后,else 语句里面的内容也会正常执行。

3.试验03

for i in range(3):
    if i == 2:
        print("哈哈哈·····")
        break
else:
    print('lwd love ydd')

运行结果如下:

哈哈哈·····

得出结论:

当 for 循环被 break 中断后,其后的 else 语句就不执行了。

是不是跟预想的有些出入?

三、总结

通过我们上述的实验,我们再回到引言里面的那段代码,其意义也就一目了然了:

  1. 当 seq 中的元素全部都是升序排序好了的,那么 for 循环里面的 break 语句是执行不到的,按照我们上述实验中的第 2 点结论来看,我们会默认执行 else 中的 return 语句,正好契合了已经排好序的 seq 不进行处理的设计理念(这里大赞一个)
  1. 当 seq 中的元素有未按照升序排序好的地方,必然会执行到 break 语句,此时其后的 else 语句就不会执行了,正好去执行后面的排序代码逻辑

综上所述,这段乍看非常迷惑人的代码,竟然蕴含了如此巧妙的设计: )

@墨雨出品 必属精品 如有雷同 纯属巧合
`非学无以广才,非志无以成学!`

相关文章

  • 02-Python中的for-else语句

    一、引言 《Python Algorithms 2nd》这本书在第 18 页有这样一段代码: 上述代码,是用来进行...

  • 10. for-else和while-else

    如果for-else中 for循环正常死亡 那么会执行else 如果for-else中的for循环中有contin...

  • day1 课堂总结

    01-第一个python程序 快捷键使用 02-python基础语法 1.注释 程序中的说明文字,没有任何程序功能...

  • For-Else文是什么

    if-else这种结构是常见的,但是for-else却很少见Else是为了判断for文的结束方式,而存在的结束fo...

  • Kotlin基础(2)-->程序的逻辑控制

    程序的执行语句主要分为3中:顺序语句、条件语句和循环语句 一、条件语句 Kotlin中的条件语句主要有两种实现方式...

  • 02-Python语法

    标准数据类型 Numbers(数字) String(字符串) List(列表) Tuple(元组) Diction...

  • 02-Python作业

  • 02-Python基础

    Python的行为规范 1.好的程序员和好的代码通过注释说明。 2.函数和类的声明的前后必须有两个换行。一般一个功...

  • 我的python学习笔记-第十天

    循环语句 Python中的循环语句有 for 和 while。 while 循环 Python中while语句的一...

  • 2.原生js——流程控制语句

    流程控制语句在JS中是至关重要的。JS中的流程控制语句包括if条件判断语句、for循环语句、while循环语句、d...

网友评论

      本文标题:02-Python中的for-else语句

      本文链接:https://www.haomeiwen.com/subject/vymhsqtx.html