在Python 3中不使用`break`来停止迭代

Ele*_*ena 3 python iteration foreach python-3.x

例如,可以在没有break(和没有continuereturn)的情况下重写此代码吗?

import logging

for i, x in enumerate(x):
    logging.info("Processing `x` n.%s...", i)
    y = do_something(x)
    if y == A:
        logging.info("Doing something else...")
        do_something_else(x)
    elif y == B:
        logging.info("Done.")
        break
Run Code Online (Sandbox Code Playgroud)

编辑:由于有些人批评使用breakcontinue内部循环,我想知道Python是否允许编写for没有它们的循环.我会说Python不允许这样做(也许它会违背"一种方法"规则).

编辑2:评论者让我注意到return可以使用,但这也不是解决方案.

iCo*_*dez 6

你总是可以使用一个函数并从中返回:

import logging

def func():
    for i, x in enumerate(x):
        logging.info("Processing `x` n.%s...", i)
        y = do_something(x)
        if y == A:
            logging.info("Doing something else...")
            do_something_else(x)
        elif y == B:
            logging.info("Done.")
            return # Exit the function and stop the loop in the process.
func()
Run Code Online (Sandbox Code Playgroud)

虽然break在我看来使用更优雅,因为它使你的意图更清晰.