ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

python 生成器 总结

python 生成器 总结 目录简述创建生成器方式1方式2send()简述生成器本质就是迭代器特点只存当前状态用一个算一个节省内存。而列表会全部存在内存如果需要很多元素都存内存电脑会卡爆创建生成器方式1使用推导式创建生成器# 列表全部数据直接存在内存lst[i*2foriinrange(5)]print(lst)# [0, 2, 4, 6, 8]# 生成器不保存全部数据只有迭代的时候才计算gen(i*2foriinrange(5))print(gen)# generator object genexpr at 0x...⚠️生成器不能直接打印看到全部元素只能next()或者 for 循环遍历。方式2使用函数创建生成器用到yield 关键字生成器函数普通函数用return干完活一次性把全部结果交出去人直接下班走人。生成器函数用yield干到一半交出一个货暂停等着下次叫我我接着干defdelivery_boy():print(小哥开工)yield1# 交出1暂停原地待命print(拿到下一个指令继续干活)yield2# 交出2暂停print(再继续干活)yield3#交出3#下面就是用生成器函数创建生成器对象gdelivery_boy()# 此时小哥站门口啥都没打印没干活next(g)→ 运行到yield1→ 返回1暂停next(g)→ 从yield1后面继续执行 → yield2 → 返回2暂停next(g)→ 继续执行 → yield3 → 返回3暂停next(g)→ 没有yield了 → StopIteration 下班# 注意要写 next(g) 不要 next(delivery_boy()) ,先用函数创建对象后再用nextsend()next(g)喊小哥干活不给小哥带消息。g.send(“消息”)喊小哥干活同时把一张小纸条塞给他纸条内容就是传进去的值。defdelivery_boy():msgyield1# 小哥交出1暂停这里等待接收纸条print(f收到纸条内容{msg})yield2gdelivery_boy()next(g)# 小哥开工交出1暂停等待纸条g.send(你好呀)# 把纸条“你好呀”塞给上一个yieldmsg拿到你好呀打印然后交出2注意小哥刚站门口还没开工你不能直接塞纸条必须先next(g)叫他先干第一步。
返回列表