《Python学习之路 -- Python基础之生成器》

  生成器可以理解为一种数据类型,这种类型自动遵循了可迭代协议,与其他数据类型不一样,其他数据类型需要通过调用__iter__()方法生成可迭代对象才遵循。也就是说,生成器本质上就是可迭代对象。在Python中,生成器有两种表现形式:生成器函数和生成器表达式

生成器函数:

# 生成器函数其实与普通的函数基本一致,不同的是生成器函数通过yield关键字来设置返回值,而且在同一个函数中可以使用多个yield
def test_yield():
    yield 1
    yield 2
    yield 3
    yield 4

# 调用生成器函数,返回的就是一个生成器对象
test = test_yield()
print(test)  # generator object
# 通过生成器对象就可以直接调用__next__()方法拿到函数中的yield返回值
print(test.__next__())  # 拿到第一个yield的值 —— 1
print(test.__next__())  # 拿到第二个yield的值 —— 2
print(test.__next__())  # 拿到第三个yield的值 —— 3
print(test.__next__())  # 拿到第四个yield的值 —— 4

# 如果yield之间还存在其他逻辑语句,则也会执行,也就是说,程序遇到yield关键字就暂停,下次执行则会重这个地方开始往下执行
def test2_yield():
    print('first')
    yield 1
    print('second')
    yield 2
    print('third')
    yield 3

# 拿到生成器对象
test2 = test2_yield()
print(test2.__next__())  # first 1
print(test2.__next__())  # second 2
print(test2.__next__())  # third 3

生成器表达式:

# 生成器表达式:(三元运算符)
test = (i for i in range(5))
print(test)  # generator object
print(test.__next__())  # 0
print(test.__next__())  # 1
print(test.__next__())  # 2
print(test.__next__())  # 3
print(test.__next__())  # 4
原文地址:https://www.cnblogs.com/jonas-von/p/8973741.html