Python编程:generator生成器

简介: Python编程:generator生成器

列表生成器

# 列表生成式
lst = []
for i in range(10):
    lst.append(i * 2)
print(lst)
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
# 相当于:
lst = [i * 2 for i in range(10)]
print(lst)
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
# 列表生成器:循环迭代,推断下一元素
lst = (i * 2 for i in range(10))
print(lst)
# <generator object <genexpr> at 0x0000000004200CF0>
"""生成器:
只用调用是才会生成相应的数据
只记录当前位置
只有一个__next__()
"""

yield生成器

# 菲波那切数列Fibonacci
def fib(max):  # 此时不能叫函数,应该叫生成器
    n = 0
    a, b = 0, 1
    while n < max:
        yield b  # 返回当前值,并保存当前状态
        a, b = b, a+b  # 同时赋值
        n = n+ 1
    return "异常消息"  # 输出异常信息
f = fib(10)
print("===")
print(f.__next__())  # 下一个值
print("===")
print(f.__next__())
print("==start loop==")
# for i in f:
#     print(i)
while True:
    try:
        g = next(f)
        print(g)
    except StopIteration as e:
        print("value of e :", e.value)
        break
"""OUT:
===
1
===
1
==start loop==
2
3
5
8
13
21
34
55
value of e : 异常消息
"""

yield生成器-协程

import time
def consumer(name):  # 消费者
    print("%s 来吃包子了!" % name)
    while True:
        baozi = yield
        print("%s 吃了第 %s 个包子" % (name, baozi))
def producer():  #  生产者
    a = consumer("A")  #初始化一个生成器
    b = consumer("B")
    a.__next__()  #程序走到第一个yield
    b.__next__()
    print("我要开始做包子了")
    for i in range(10):
        time.sleep(1)
        print("第 %s 个包子" % i)
        a.send(i)  # 将数据发送到 yield 位置,并执行一次next
        b.send(i)
producer()
# consumer("a")
"""
A 来吃包子了!
B 来吃包子了!
我要开始做包子了
第 0 个包子
A 吃了第 0 个包子
B 吃了第 0 个包子
第 1 个包子
A 吃了第 1 个包子
B 吃了第 1 个包子
第 2 个包子
A 吃了第 2 个包子
B 吃了第 2 个包子
第 3 个包子
A 吃了第 3 个包子
B 吃了第 3 个包子
第 4 个包子
A 吃了第 4 个包子
B 吃了第 4 个包子
第 5 个包子
A 吃了第 5 个包子
B 吃了第 5 个包子
第 6 个包子
A 吃了第 6 个包子
B 吃了第 6 个包子
第 7 个包子
A 吃了第 7 个包子
B 吃了第 7 个包子
第 8 个包子
A 吃了第 8 个包子
B 吃了第 8 个包子
第 9 个包子
A 吃了第 9 个包子
B 吃了第 9 个包子
"""

相关文章
|
2月前
|
人工智能 数据安全/隐私保护 Python
小红书图文生成器,小红书AI图文生成工具,python版本软件
Pillow库自动生成符合平台尺寸要求的配图7;3)利用Playwright实现自动化发布流程6。
|
2月前
|
数据采集 NoSQL 调度
当生成器遇上异步IO:Python并发编程的十大实战兵法
本文通过十大实战场景,详解Python中生成器与异步IO的高效结合。从协程演进、背压控制到分布式锁、性能剖析,全面展示如何利用asyncio与生成器构建高并发应用,助你掌握非阻塞编程核心技巧,提升I/O密集型程序性能。
90 0
|
5月前
|
开发者 Python
Python代码设计:使用生成器替代回调函数
本文探讨了在处理大文件时计算MD5值的实现方法,并展示了如何通过回调函数、生成器和类等方式输出进度。首先介绍了通过回调函数更新进度的方式,然后优化为使用生成器简化调用者代码,最后对比了两种方式的优缺点。虽然生成器使代码更简洁,但在异常处理上不如回调函数灵活。作者通过实例分析,帮助开发者根据需求选择合适的方式。
99 16
|
25天前
|
传感器 数据采集 监控
Python生成器与迭代器:从内存优化到协程调度的深度实践
简介:本文深入解析Python迭代器与生成器的原理及应用,涵盖内存优化技巧、底层协议实现、生成器通信机制及异步编程场景。通过实例讲解如何高效处理大文件、构建数据流水线,并对比不同迭代方式的性能特点,助你编写低内存、高效率的Python代码。
100 0
|
2月前
|
存储 API 数据库
自动发短信的软件,批量自动群发短信,手机号电话号生成器【python框架】
这个短信群发系统包含以下核心功能: 随机手机号生成器(支持中国号码) 批量短信发送功能(使用Twilio API)
|
3月前
|
Python
Python编程基石:整型、浮点、字符串与布尔值完全解读
本文介绍了Python中的四种基本数据类型:整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。整型表示无大小限制的整数,支持各类运算;浮点型遵循IEEE 754标准,需注意精度问题;字符串是不可变序列,支持多种操作与方法;布尔型仅有True和False两个值,可与其他类型转换。掌握这些类型及其转换规则是Python编程的基础。
210 33
|
2月前
|
数据采集 分布式计算 大数据
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
81 1
|
3月前
|
设计模式 安全 Python
Python编程精进:正则表达式
正则表达式是一种强大的文本处理工具,用于搜索、匹配和提取模式。本文介绍了正则表达式的语法基础,如`\d`、`\w`等符号,并通过实例展示其在匹配电子邮件、验证电话号码、处理日期格式等场景中的应用。同时,文章提醒用户注意性能、编码、安全性等问题,避免常见错误,如特殊字符转义不当、量词使用错误等。掌握正则表达式能显著提升文本处理效率,但需结合实际需求谨慎设计模式。
135 2
|
3月前
|
数据采集 搜索推荐 调度
当生成器遇上异步IO:Python并发编程的十大实战兵法
生成器与异步IO是Python并发编程中的两大利器,二者结合可解决诸多复杂问题。本文通过十个真实场景展示其强大功能:从优雅追踪日志文件、API调用流量整形,到实时数据流反压控制、大文件分片处理等,每个场景都体现了生成器按需生成数据与异步IO高效利用I/O的优势。两者配合不仅内存可控、响应及时,还能实现资源隔离与任务独立调度,为高并发系统提供优雅解决方案。这种组合如同乐高积木,虽单个模块简单,但组合后却能构建出复杂高效的系统。
83 0
|
4月前
|
数据采集 安全 BI
用Python编程基础提升工作效率
一、文件处理整明白了,少加两小时班 (敲暖气管子)领导让整理100个Excel表?手都干抽筋儿了?Python就跟铲雪车似的,哗哗给你整利索!
114 11

热门文章

最新文章

推荐镜像

更多