小编典典

为什么python在for和while循环之后使用'else'?

all

我了解此构造的工作原理:

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更有意义(我正在努力训练自己阅读它)。

我想知道 Python 编码人员是如何在他们的脑海中阅读这个结构的(或者大声,如果你愿意的话)。也许我错过了一些可以让这些代码块更容易被破译的东西?


阅读 255

收藏
2022-03-04

共1个答案

小编典典

即使对于经验丰富的 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 线程摘要

2022-03-04