python生成器学习心得

本文分享了作者在学习Python生成器过程中的心得体验,详细探讨了生成器的工作原理,包括如何使用yield关键字创建生成器,以及生成器在内存管理和效率方面的优势。通过实例解析,阐述了生成器在处理大量数据或无限序列时的有效策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于生成器的优秀教程有很多。看了不少教程后以为弄明白生成器是怎么回事了,结果对廖雪峰pyhon教程协程一课中生成器案例( 点击打开链接)和 类似的生成器案例(点击打开链接没看懂。后来又看了《python生成器详解》( 点击打开链接)一文对send()方法的阐述,才理解了上述的两个案例。本文是对send()方法的进一步补充(若本人理解错误,烦请大家指正)。以下为一个生成函数案例,引用自《python生成器详解》中的例子,并稍作了修改。
# --*-- coding: utf-8 --*--
import random, time
def echo(value=None):
    while True:
        a = (yield value)
        print("The a is", a)
        print ('The value is', value)
        if value:
            value += 1
        print ('The value is', value)
            
g = echo(1)
print g.next()

print g.send(3)
print g.send(8)
print g.send(10)

。以下为代码调试

1
('The a is', 3)
('The value is', 1)
('The value is', 2)
2
('The a is', 8)
('The value is', 2)
('The value is', 3)
3
('The a is', 10)
('The value is', 3)
('The value is', 4)
4
当调用g.next()时,执行yield value 生成1,函数暂停并返回1,注意此时函数 不会执行“将1附给变量a”。接着调用 g.send(3),接下来的函数执行步骤依次为:(1)参数3作为表达式 (yield value)的值,并附给变量a返回,函数yield恢复从执行a=yield表达式开始。(2)上次函数暂停时value=1,将此value代入 value += 1,得到value=2(#解释了输出 ('The value is', 1) ('The value is', 2) )。(3)执行yield value 生成2,函数暂停并返回2,注意此时函数仍不会执行“将2附给变量a”后面的 g.send(8)和 g.send(10)步骤以此类推。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值