Python else 还可以这样用?

2016-09-21 10:34:36 +08:00
 songkaiape
for i in range(x):
    if i>80:
        break
#这里遍历一个列表元素是否满足条件
else:
    print('go')
#如果全部都不满足条件会跳转执行这一步

比较好奇这个 else 居然可以正确执行,最开始我还为是代码缩进错误,官方有类似这种写法的范例么?

4107 次点击
所在节点    Python
37 条回复
scipio
2016-09-21 13:33:24 +08:00
没人吐槽代码中的这句注释么?

> #如果全部都不满足条件会跳转执行这一步

这样的理解是误人子弟。
songkaiape
2016-09-21 13:54:20 +08:00
ifaii
2016-09-21 14:01:24 +08:00
@Trim21 明显有不同吧,楼主的是 range(x)中所有的元素都不满足 if 时才执行 else ,你这样写就变成了只要遇到不满足 if 就执行 else
21grams
2016-09-21 14:20:46 +08:00
我觉得挺好的,简洁,要不这么写的话,你还要加判断循环是执行完了还是 break 了。
zhanglintc
2016-09-21 15:58:30 +08:00
pythonic 进阶必备
dalang
2016-09-21 17:15:21 +08:00
for else 在部分场合很好用呀。
easing
2016-09-21 17:16:08 +08:00
没用过的人表示逻辑确实不清晰,坑爹。。
spikeLIN
2016-09-21 17:32:07 +08:00
不建议这么用
likuku
2016-09-21 17:34:36 +08:00
茴香豆的“茴”字有九九八十一种写法...
lynx
2016-09-21 17:43:15 +08:00
这个特性挺好用的,没必要为了照顾一部分人改写成一堆很麻烦的语句
这个语法也不属于偏门
weyou
2016-09-21 17:54:23 +08:00
这个特性很好用啊, 我一直用,很久以前发现了就感觉逻辑很清晰自然啊,在循环查找时可以少定义一个变量来判断。类似的还有 try...except...else... 他们的含义就是如果没有 break ( except )就执行 else
laoyur
2016-09-21 18:00:23 +08:00
@mgna17
> for - else 挺好用的啊, for 没有被 break 则会执行后续 else 中的代码。
> 不过 else 这个词的确是个槽点,要是把 else 改成 than 之类的就好了。

Python 初学者表示不知道这个特性,在没有去看文档的情况下,先斗胆自己猜测一下 for else 的意思:
for 如果没有执行到 break ,就会执行 else 中的代码

那么问题来了,如果我有意在 for 的最后一次 loop 中 break ,那这个 else 会不会执行?
mgna17
2016-09-21 18:06:53 +08:00
@laoyur 不会
geew
2016-09-21 18:23:26 +08:00
@laoyur 只要 break 执行了 else 里面的就不会执行
In [626]: for i in range(10):
.....: print i,
.....: if i == 9:
.....: break
.....: else:
.....: print 'else'
.....:
0 1 2 3 4 5 6 7 8 9
mingyun
2016-09-21 22:29:44 +08:00
@songkaiape 这个解释不错
techmoe
2016-09-22 05:48:36 +08:00
这个和 while 简单拼拼也能和 for 一样用的道理差不多吧
shily
2016-09-22 11:07:18 +08:00
作为 Java 程序员一眼就猜到是 for-else 语句。
看了楼上才明白 else 是在没有 break 的情况下才执行的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/307744

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX