美文网首页Python小哥哥
耐人寻味的 for...else...语句

耐人寻味的 for...else...语句

作者: 我爱学python | 来源:发表于2019-04-08 16:01 被阅读13次

程序员买西瓜的笑话可能大部分读者都知道,今天写的这篇文章和这个笑话有一定的关系。

任何编程语言都提供了 if…else… 语句,表示如果(if)满足条件就做某件事,否则(else)就做另外一件事:

然而,在 Python 中 else 不仅可以和 if 搭配使用,另一种特有的句法是 for…else …,它还可以和 while、try…except 组合使用,例如:

但是,你会发现 for…else… 与 if…else… 表现得不一样,按照以往经验来说,执行了 for 语句块的代码就不执行 else 里面了,反之亦然。

然而,我们看到的却恰恰相反,for 循环结束之后接着又执行了 else 语句块,这就有点意思了,if … else … 翻译成大白话就是如果…否则…,而 for…else… 翻译成白话成了直到… 然后 …,为什么不把它写成  for…then… 的句式呢?

for 循环遍历空列表也会执行 else 语句块,因为它是正常退出 for 循环的一种特例情况。

继续探索,我们用 break 提前终止 for 循环

循环遇到 break 退出后,整个语句就结束,else 语句块也不执行了。

综上,我们可以得出这样一个结论,只有当循环里没有遇到 break 时,else 块才会执行。

Python 之父为什么要搞出这样的一种语法糖出来呢?这是我们常人没法理解的。不过「python之禅」告诉了我们答案:“Although that way may not be obvious at first unless you’re Dutch.”

带着这个问题,我也在 StackOver Flow 找了一下答案,在平时的开发中真的很少有 for…else… 的应用场景,不过,像下面这种场景用 for else 还真是一种 pythonic 的用法。

当你用 for 循环迭代查找列表的中的某个元素时,如果找到了就提前退出,如果迭代完了还没找到需要以另外一种形式通知调用者时,用 for else 无疑是最好的选择。

如果不用 for…else… , 那么还需要专门建立一个临时标记变量来标记是否已经找到了

当你想在房间里找某样东西时,只要在任意位置找到了,就停止继续搜查工作。但如果把整个房间都翻遍了,还没找到我们想要的东西,需要告诉人家说:这儿没有你要找的东西。遇到这样的情况用 for … else ,除此之外,最好不要用它。

相关文章

  • 耐人寻味的 for...else...语句

    访问我的博客 blog.colinspace.com 老婆给当程序员的老公打电话:“下班顺路买一斤包子带回来,如...

  • 耐人寻味的 for...else...语句

    程序员买西瓜的笑话可能大部分读者都知道,今天写的这篇文章和这个笑话有一定的关系。 任何编程语言都提供了 if…el...

  • python跳出多重循环的方法

    方法1:自定义异常 方法2:将循环封装为函数,return 方法3:用for...else...语句 方法3解释:...

  • Python的for...else...语法

    先执行for循环,再for循环正常完成时执行else,也就意味着循环不能遇到任何break;常见的循环是遍历每一项...

  • 史铁生《放下与执着》之《爱情问题》

    史铁生的文字,思想太深刻,见解也特别独到,有一些文字,也是令人觉得晦涩难懂,但很多语句,也是很耐人寻味、深思。现在...

  • 如何成为一个失败的人

    赠言:原价我的文笔,我不会写华丽的语言,也不会用耐人寻味的语句。…… 本书简介:有4700年文化的中国,从古至今有...

  • 古风文化的出死入生

    一个非常时尚流行的概念,偏偏叫做古风,这本身就耐人寻味。在微博里,有人指责现在的“古风”歌词语句不通,招致了众多追...

  • 耐人寻味

    来日大难 口燥唇干 今日相乐 皆当喜欢

  • 耐人寻味

    你永远都不知道,人在无意识的情况下,写的总是我不知道。

  • 耐人寻味

    竹本无心,奈何节外生枝。 蒜只披衣,偏又耐人寻味。

网友评论

    本文标题:耐人寻味的 for...else...语句

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