为什么这两个非常短的代码不相同? (产量,发电机)

时间:2017-11-28 09:41:41

标签: python

这是我的代码:

版本1

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

版本2

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

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

2 个答案:

答案 0 :(得分:0)

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

在版本2中,只有在找不到字符串"xxx"时才会打破循环。

答案 1 :(得分:0)

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

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

在版本2中,它一直产生结果,直到它到达文件-1的末尾或得到-1作为pos的值。

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