我了解此构造的工作原理:
for i in range(10): print(i) if i == 9: print("Too big - I'm giving up!") break else: print("Completed successfully")
但我不明白为什么else在这里用作关键字,因为它表明有问题的代码仅在for块未完成时运行,这与它的作用相反!无论我怎么想,我的大脑都无法从for语句到else块无缝地前进。对我来说,continue或者continuewith更有意义(我正在努力训练自己阅读它)。
else
for
continue
continuewith
我想知道 Python 编码人员是如何在他们的脑海中阅读这个结构的(或者大声,如果你愿意的话)。也许我错过了一些可以让这些代码块更容易被破译的东西?
即使对于经验丰富的 Python 编码人员来说,这也是一个奇怪的结构。当与 for 循环结合使用时,它的基本意思是“在可迭代中找到一些项目,否则如果没有找到,请执行…”。如:
found_obj = None for obj in objects: if obj.key == search_key: found_obj = obj break else: print('No object found.')
但是任何时候你看到这个结构,一个更好的选择是将搜索封装在一个函数中:
def find_obj(search_key): for obj in objects: if obj.key == search_key: return obj
或使用列表推导:
matching_objs = [o for o in objects if o.key == search_key] if matching_objs: print('Found {}'.format(matching_objs[0])) else: print('No object found.')
它在语义上不等同于其他两个版本,但在非性能关键代码中运行良好,无论您是否迭代整个列表都无关紧要。其他人可能不同意,但我个人会避免在生产代码中使用 for- else 或 while-else 块。
另见[Python-ideas] for…else 线程摘要