网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

闲的蛋疼

Python有一个for...else语法,它的写法如下

创新互联公司-专业网站定制、快速模板网站建设、高性价比巴彦淖尔网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式巴彦淖尔网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖巴彦淖尔地区。费用合理售后完善,十多年实体公司更值得信赖。

for i in range(0,100):
    if i == 3:
        break
else:
    print("Not found")

该语句表示:若for循环遍历完毕,则执行else部分的语句。也就是说上述代码不会有任何输出,而下述代码会输出“Not found”:

for i in range(0,100):
    pass
else:
    print("Not found")

可以很容易地猜出这种语法通常是为了做如下替换的:

# 正常写法
found = False
for i in range(0, 100):
    if i == 3:
        found = True
        break

if not found:
    print("Not found")

# for...else写法
for i in range(0, 100):
    if i == 3:
        break
else:
    print("Not found")

但这里要说的重点不是这个语法的用处,而是这个语法的关键字选择。实际上如果稍微了解一点编程元素的话,很可能参考if...else的用法,把for...else的意思理解为:如果循环没有正常执行完毕(即被break打断),则执行else部分。但从实际作用上来讲(即“循环正常执行完则执行else部分”),显然用for...then或者for...continue都是更好的选择。

那么为什么Python非常神奇地选择了用else作为关键字呢?突然想到后突然好奇,实在忍不住查了一下后发现一个个人认为最有说服力的是“因为while是if更普遍的形式”。例如对于如下if...else代码:

if condition:
    ...
else:
    ...

实际上可以写为:

while condition:
    ...
    break
else:
    ...

也就是所if可以视为while的一个特殊形式,那么有趣的来了。

在上面的while...else中,如果没有break,那么只有当condition为false时才会终止循环那么,而当condition为false时,显然就会执行一次else部分。

即:如果没有遇到break则意味着else部分尚有机会执行。

另一方面,如果遇到了break,就意味着跳出了while...else块,也就是说不会再检查condition,自然也不会再执行else部分。

即:如果碰到了break则else部分不再会被执行。

然后又因为for是while的特殊性形式,所以...

另外Python也支持while...for循环,而这个这个看起来就比较符合直觉了:

ok = True

while ok:
    ok = False
else:
    print("ABC")

尽管如此,由于for...else的反直觉设计会让人迷惑,在实际中并不推荐使用,如果只是为了跳出,封装成函数return是更好的选择。如果真的要用,就写下注释。

【参考资料】:

【1】Why does python use 'else' after for and while loops?


本文名称:闲的蛋疼
分享URL:http://bjjierui.cn/article/dsogige.html

其他资讯