循环后的else分支

2019年8月26日 / 12次阅读 / Last Modified 2019年9月3日
语法

Python语言语法的一大特点,就是比较符合人类自然语言的写法。比如本文想介绍的循环(for和while)后的else分支,这个feature在很多其它编程语言中都没有,从编程逻辑上分析,其实也不是必须。我觉得Python支持在循环后跟else分支,就是为了更好的代码可读性。

看个例子

>>> for i in range(3):
...     print(i)
... else:
...     print('for loop end')
...
0
1
2
for loop end

代码先进入循环,循环结束后,执行else分支。从逻辑上看,else分支有点“多余”,因为循环结束后,代码自然就离开循环,执行后面的语句,没有else分支,也是一样按顺序执行后面的语句。这里的else分支,就是明确说明,在循环结束之后执行,设计这个特性,应该是有考虑代码的可读性的。

循环后的else分支,不能带条件

循环后的else分支,其实自带一个条件,即循环结束,else不能再带if。但是却可以在else的内部,编写复杂的逻辑代码,这部分是自由的。

>>> for i in range(3):
...     print(i)
... else:  # no condition here
...     # you can do any thing here
...     print('after loop i =',i)
...     if i == 3: print('WTF')
...     else: print('En...')
...
0
1
2
after loop i = 2
En...

在for循环后的else代码块内部,你可以自由发挥!

break和continue

continue不影响循环后else分支的执行,而break是跳出循环,同时也跳出了循环后跟着的else分支(要把此else分支与循环想象成一个整体)。

>>> for i in range(3):
...     if i == 1: continue
...     print(i)
... else:
...     print('loop end')
...
0
2
loop end

上面这段代码,用continue跳过了一个i的打印,最后for循环后的else分支能够被执行。我们再测试一下break的效果:

>>> for i in range(3):
...     if i == 1: break
...     print(i)
... else:
...     print('do sth after for loop')
...
0
>>>

break跳出了for循环,同时也跳出了与for循环配对的else分支。else分支是与循环配对的,就像与传统的 if 配对使用,当与循环配对使用的时候,else的条件就是循环的条件为非真的时候。

代码执行如不能进入循环,else分支也会被执行

这种情况就相当于进入循环的条件为False,直接进入else分支。

>>> while False:
...     print('dead code')
... else:
...     print('running from here')
...
running from here

前面都是用for循环举例,其实while循环也是一样的。

Python官方对for语句后面的else的解释:Loop statements may have an else clause; it is executed when the loop terminates through exhaustion of the list (with for) or when the condition becomes false (with while), but not when the loop is terminated by a break statement.

以上就是对Python循环语句后面跟的else分支的介绍。

-- EOF --

本文链接:https://www.pynote.net/archives/960

留言区

《循环后的else分支》有1条留言

电子邮件地址不会被公开。 必填项已用*标注

  • 麦新杰

    循环中break语句的使用,才给循环的else分支带了新东西。 [回复]


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top