#2-使用生成器生成斐波那契数列(无限序列)
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
gen = fibonacci()
for _ in range(10):
print(next(gen),end=',') #第一次next后,执行fibonacci函数,到yield a处停止,并把a值返回,执行print(next(gen)),把a值给打印出来;第二次next后,则从停止出先执行完剩余的a, b = b, a + b,然后执行yield后停止。
def simple_generator():
value = None
while True:
received_value = (yield value)
# 如果 send() 第一次被调用或者传入了 None,则 received_value 为 None
if received_value is not None:
value = received_value * 2 # 对接收到的值进行处理
# 创建一个生成器对象
gen = simple_generator()
# 启动生成器,获取第一个 yield 的返回值(默认为 None)
first_value = next(gen) # first_value 是 None
print(first_value) # 输出:None,因为上一个 yield 表达式返回了 None
# 使用 send() 方法发送一个值
response = gen.send(5) # 这里,5 将会被赋值给上一个 yield 表达式,并将 5 * 2 赋值给 value
print(response) # 输出:10,因为这次 send(5) 后,生成器内部将 5 * 2 赋值给 value
# 继续发送另一个值
response = gen.send(10)
print(response) # 输出:20,因为这次 send(10) 后,生成器内部将 10 * 2 返回给了 response
#第一次next直行道yield a处停止,开辟出received_value作为后续send传入的值的存放位置;当用send传入值后,把send值放入received_value,然和执行后面的if语句,然后到yield处停止,再开辟出received_value空间,等待下一个传入值。value是输出的值。
def gen_func():
for x in range(2, 10, 2):
yield x #暂停执行for循环,并返回x的值,下一步执行 print(i)打印出x的值。
gen_list=gen_func()
for i in gen_list:
print(i)