Python 为什么这两个很短的代码不相等?(产量、发电机)

Python 为什么这两个很短的代码不相等?(产量、发电机),python,Python,这是我的密码: 版本1 版本2 版本1只给了我一个结果,而版本2给了我所有的结果!WTF?在版本1中,您将在第一次迭代结束时立即无条件地中断循环 在版本2中,只有当它找不到字符串xxx时才中断循环。这两个函数都是生成器函数,但在版本1中,它会检查位置并将其与-1进行比较,如果其满足条件,则生成结果,否则将中断循环 def X(): while True: pos = something.find("xxx") if pos != -1:

这是我的密码:

版本1

版本2


版本1只给了我一个结果,而版本2给了我所有的结果!WTF?

在版本1中,您将在第一次迭代结束时立即无条件地中断循环


在版本2中,只有当它找不到字符串xxx时才中断循环。

这两个函数都是生成器函数,但在版本1中,它会检查位置并将其与-1进行比较,如果其满足条件,则生成结果,否则将中断循环

def X():
    while True:
        pos = something.find("xxx")
        if pos != -1:
            yield pos
        break
而在版本2中,它会一直生成结果,直到到达文件-1的末尾或作为pos的值get-1为止

def X():
    while True:
        pos = something.find("xxx")
        if pos == -1:
            break
        yield pos

他们做完全不同的事情。第一个循环总是在第一次迭代后中断。你知道中断的作用吗?
def X():
    while True:
        pos = something.find("xxx")
        if pos != -1:
            yield pos
        break
def X():
    while True:
        pos = something.find("xxx")
        if pos == -1:
            break
        yield pos