python生成器原理

#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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值