当前位置: 首页 > wzjs >正文

南宁市优化网站国内优秀个人网站欣赏

南宁市优化网站,国内优秀个人网站欣赏,海淀区建设委员会网站,雅虎网站提交一、生成器概述 生成器(Generator)是Python中用于创建迭代器的工具,通过yield关键字实现。与普通函数不同,生成器函数返回的是迭代器对象,具有以下核心特性: 内存效率:只在需要时生成值&#x…

一、生成器概述

生成器(Generator)是Python中用于创建迭代器的工具,通过yield关键字实现。与普通函数不同,生成器函数返回的是迭代器对象,具有以下核心特性:

  1. 内存效率:只在需要时生成值,适合处理大数据流

  2. 状态保持:自动保存执行上下文

  3. 惰性计算:按需生成元素,节省计算资源

# 普通函数 vs 生成器函数
def normal_func():return [x for x in range(1000000)]  # 立即创建百万元素列表
def generator_func():for x in range(1000000):yield x  # 每次只生成一个元素

二、生成器基础用法

1. 创建生成器

def simple_generator():print("启动生成器")yield 1yield 2yield 3
gen = simple_generator()  # 创建生成器对象
print(type(gen))  # <class 'generator'>

2. 使用生成器

# 手动迭代
print(next(gen))  # 输出:启动生成器 1
print(next(gen))  # 2
print(next(gen))  # 3
# 自动迭代
for num in simple_generator():print(num)  # 依次输出1,2,3

三、执行流程解析

通过调试模式观察执行流程:

def countdown(n):print("开始倒计时")while n > 0:yield nn -= 1print("发射!")
cd = countdown(3)
print(next(cd))  # 输出:开始倒计时 3
print(next(cd))  # 2 
print(next(cd))  # 1
print(next(cd))  # 抛出StopIteration并打印"发射!"

执行流程图解:

首次next() → 执行到第一个yield暂停
↓
后续next() → 从上个yield之后继续执行到下一个yield
↓
循环直到函数结束,抛出StopIteration

四、高级应用技巧

1. 生成器表达式

squares = (x**2 for x in range(10))
print(sum(squares))  # 285

2. 双向通信

def interactive_gen():total = 0while True:value = yield total  # 接收外部传入值if value is None:breaktotal += value
ig = interactive_gen()
next(ig)  # 启动生成器
print(ig.send(10))  # 10
print(ig.send(20))  # 30

3. 异常处理

def safe_gen():try:yield 1yield 2except ValueError:yield "错误处理"sg = safe_gen()
print(next(sg))  # 1
sg.throw(ValueError)  # 输出:错误处理

4. 组合生成器

def chain_generators(*iterables):for it in iterables:yield from it  # Python 3.3+语法
for num in chain_generators(range(3), (5,6)):print(num)  # 输出0,1,2,5,6

五、典型应用场景

1. 大文件处理

def read_large_file(file_path):with open(file_path, 'r') as f:while True:chunk = f.read(4096)if not chunk:breakyield chunk

2. 无限序列

def fibonacci():a, b = 0, 1while True:yield aa, b = b, a + b
fib = fibonacci()
print([next(fib) for _ in range(10)])  # [0,1,1,2,3,5,8,13,21,34]

3. 状态机实现

def traffic_light():states = ['RED', 'GREEN', 'YELLOW']index = 0while True:yield states[index]index = (index + 1) % 3
light = traffic_light()
print(next(light))  # RED
print(next(light))  # GREEN

六、注意事项

  1. 单次使用性
gen = (x for x in range(3))
print(list(gen))  # [0,1,2]
print(list(gen))  # []
  1. 上下文管理器
from contextlib import contextmanager
@contextmanager
def gen_context():print("进入上下文")try:yield "资源"finally:print("清理资源")
with gen_context() as res:print(f"正在使用 {res}")  # 进入上下文 → 正在使用资源 → 清理资源
  1. 性能对比(数据量=1,000,000):
列表推导式:内存占用  82MB,耗时 0.1s
生成器表达式:内存占用 <1MB,耗时 0.08s

七、总结与建议

核心优势

  • 内存友好型数据处理

  • 支持惰性求值

  • 简化迭代器实现

  • 实现协程基础

学习建议

  1. 从简单计数器开始练习

  2. 尝试改写现有列表处理代码为生成器版本

  3. 探索itertools模块的生成器工具

  4. 学习异步编程时结合async/await语法

进阶路线

生成器 → 迭代器协议 → 协程 → 异步IO

# 综合示例:分页查询生成器
def paginated_query(query):page = 1while True:results = get_results(query, page)if not results:breakyield from resultspage += 1
# 使用示例
for record in paginated_query("SELECT * FROM big_table"):process(record)
http://www.dtcms.com/wzjs/13486.html

相关文章:

  • 个人网站设计及实现论文品牌建设的五个要素
  • 电商平台推广工具有哪些推广关键词优化公司
  • 休闲食品网站建设目的油烟机seo关键词
  • 国内返利网站怎么做牛奶推广软文文章
  • 用dw做网站的步骤免费b站推广入口2023
  • 郑州做网站汉狮阿里巴巴官网
  • 网站 域名解析出错网站安全检测
  • 网站开发培训机构排名广东搜索引擎优化
  • 互联网营销培训班 考证网络搜索优化
  • 自带浏览器建设银行网站打不开关键词都有哪些
  • 南京网站建设价格最新seo网站优化教程
  • 网站优化http:www.seo668.cnseo广告制作公司
  • 黄色国内外网站如何做品牌推广方案
  • 北京网站推广优化网络推广外包内容
  • 做的网站怎么转成网址链接关键词数据分析工具有哪些
  • 自己做网站要买域名吗沈阳黄页88企业名录
  • 商城网站建设报价表好的产品怎么推广语言
  • 机械公司网站模板bt磁力搜索
  • 展示型企业网站有哪些怎么创建自己的游戏网站
  • 网站开发一般学多久上海网站制作
  • 网站建设与管理的流程方案广州网络营销的推广
  • 深圳市做网站的有那些公司丽水网站seo
  • 企业网站怎样做网络营销案例2022
  • 重庆做网站开发的集中百度推荐现在为什么不能用了
  • 百度飙风算法 小网站广告公司品牌营销推广
  • 专业做网站app真假神马搜索推广
  • onedrive 做网站静态网站维护合同
  • 无经验培训 网页设计学员百度推广和优化哪个好
  • 沧州网站设计公司价格谷歌搜索引擎香港免费入口
  • dede网站入侵教程百色seo快速排名