什么是生成器(Generator)
1、是一种数据类型能源源不断地生成数据
2、"惰性"特点:一次生成一个值,而不是生成一个序列
3、生成器一定是迭代器比迭代器更简洁
使用生成器表达式创建生成器
from typing import Generator, Iterator, Iterable
# 列表生成式/列表推导式
num1 = [n for n in range(10)]
print(type(num1), num1)
# 生成器与列表生成式的区别就是[]和()
num2 = (n for n in range(10))
print(type(num2), num2)
print(isinstance(num2, Generator))
print(isinstance(num2, Iterator))
print(isinstance(num2, Iterable)) # 返回True说明生成器就是一种迭代器
运行结果:
定义生成器函数生成生成器
"""
定义“生成器函数”,来创建生成器
(1)生成器函数中使用yield关键字来生成值
(2)调用生成器函数,就返回一个生成器
(3)每对生成器调用一次next函数,
1、就会返回一次yield后面的值
2、函数并不会结束,会保存工作现场
3、再次调用next函数,会从yield关键字后面的代码继续执行
"""
def nums_gen():
for i in range(10):
yield i
nums = nums_gen()
print(type(nums)) # generator 调用生成器函数,返回一个生成器
print(next(nums))
for i in nums:
print(i, end=" ")
运行结果:
"""
定义“生成器”函数,来创建生成器
定义一个裴波拉纳切数列的生成器
(1)数列 1 1 2 3 5 8 13 。。。。
"""
def fib(n):
prev, curr = 0, 1
for _ in range(n):
yield curr
prev, curr = curr, prev + curr
fib = fib(20)
for i in fib:
print(i, end=' ')
运行结果: