小编Chi*_*cky的帖子

使用“for i ingenerator”和 next(generator) 耗尽生成器有什么区别

我想学习如何使用生成器的返回值(但这不是我现在关心的)。

经过查找,他们说我可以获取StopIteration生成器耗尽时的返回值,所以我用以下代码进行了测试:

def my_generator():
    yield 1
    yield 2
    yield 3
    return "done"


def exhaust_generator(_gen):
    print("===============================================\n")
    print("exhaust_generator")
    try:
        while True:
            print(next(_gen))
    except StopIteration as e:
        print(f"Return value: '{e.value}'")


def exhaust_generator_iter(_gen):
    print("===============================================\n")
    print("exhaust_generator_iter")
    try:
        for i in _gen:
            print(i)
        print(next(_gen))
    except StopIteration as e:
        print(f"Return value: {e.value}")


gen = my_generator()
gen2 = my_generator()
exhaust_generator(gen)
exhaust_generator_iter(gen2)

Run Code Online (Sandbox Code Playgroud)
===============================================

exhaust_generator
1
2
3
Return value: 'done'
===============================================

exhaust_generator_iter
1
2
3
Return value: None

Run Code Online (Sandbox Code Playgroud)

正如您所看到的,耗尽生成器的两个版本的返回值不同,我想知道为什么。

搜索了谷歌,但没有帮助。

python generator

2
推荐指数
1
解决办法
75
查看次数

标签 统计

generator ×1

python ×1