Python, for-else, while-else是否造成了语义歧义 ( 增加心智负担 )?
本文介绍了Python, for-else, while-else是否造成了语义歧义 ( 增加心智负担 )?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
看到用了 for-else/while-else的代码, 往往不能马上搞懂 else 处代码的意思
因为, 脑袋不能马上反应, else 到底表示了什么样的语义( 还需要转几个弯 )
(但是 try - except -else 没有带来语义上的歧义)
相关代码
能否一眼辨别出, 什么时候, 什么条件下 else处代码会执行?
for i in range(5):
... print(i)
... else:
... print('Iterated over everything :)')
for i in range(5):
... if i == 2:
... break
... print(i)
... else:
... print('Iterated over everything :)')
for i in []:
... print(i)
... else:
... print('Still iterated over everything (i.e. nothing)')
> i = 0
>>> while i <= 5:
... i += 1
... print i
... else:
... print 'Yep'
for x in data:
if meets_condition(x):
break
else:
# raise error or do additional processing
解决方案
题主认为语义不明是可以理解的。毕竟其他语言中的 else 只跟 if 搭配,更何况这里的 else 并不符合自然语义。
在自然语义下,else 有 "其它的" 的意思,但对 for, while, try 型 else,用 "除了以上程序考虑到的情况" 来解释此子句并不合理。私以为理解成 "主块正常结束后的情况" 更为正确——所谓主块,即 else 附属的 循环体 或 try 子句; 所谓正常,即不通过特殊手段中止控制流(异常 或 循环中的 break)。
这么理解可能更清晰些。
这篇关于Python, for-else, while-else是否造成了语义歧义 ( 增加心智负担 )?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文