Python使用 - 用yield实现生成器

 

from collections.abc import Iterator

def test_yield(n):
    for i in range(n):
        yield i * 2  # 暂停在当前步骤, 返回值, 下次继续从暂停位置继续
    return -1

my_gen = test_yield(3)
print(type(my_gen), isinstance(my_gen, Iterator))  # <class 'generator'> True
for elem in my_gen: # 0 2 4
    print(elem, end=" ")

 

 while的方式遍历生成器,通过StopIteration异常来确定是否没有元素了

from collections.abc import Iterator

def test_yield(n):
    for i in range(n):
        yield i * 2  # 暂停在当前步骤, 返回值, 下次继续从暂停位置继续
    return -1

my_gen = test_yield(3)
print(type(my_gen), isinstance(my_gen, Iterator))  # <class 'generator'> True

while True:
    try:
        print(next(my_gen), end=" ")  # 0 2 4
    except StopIteration as e:
        print()
        print(e)  # -1
    break

 

多个yield时,生成器的行为

from collections.abc import Iterator

def test_yield(n):
    for i in range(n):
        yield i * 2  # 暂停在当前步骤, 返回值, 下次继续从暂停位置继续
        yield i * 3
    return -1

my_gen = test_yield(3)
print(type(my_gen), isinstance(my_gen, Iterator))  # <class 'generator'> True
for elem in my_gen: # 0 0 2 3 4 6 
    print(elem, end=" ")

 

posted @ 2023-09-04 23:25  yanghui01  阅读(6)  评论(0编辑  收藏  举报