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

如何自己做直播网站网站开发的计划书

如何自己做直播网站,网站开发的计划书,网页设计创意主题,烟台网站建设询问臻动传媒生成器概述 生成器是 Python 中的一种特殊迭代器,通过普通函数的语法实现,但使用 yield 语句返回数据。生成器自动实现了 __iter__() 和 __next__() 方法,因此可以直接用于迭代。生成器的核心特点是延迟计算(lazy evaluation&…

生成器概述

生成器是 Python 中的一种特殊迭代器,通过普通函数的语法实现,但使用 yield 语句返回数据。生成器自动实现了 __iter__()__next__() 方法,因此可以直接用于迭代。生成器的核心特点是延迟计算(lazy evaluation),即只在需要时生成下一个值,而不是一次性计算并存储所有值。

生成器的作用与优势

作用:

  • 节省内存空间
  • 按需生成数据项
  • 支持无限序列生成
  • 简化复杂迭代逻辑的代码

优势:

  • 内存效率高,适用于大数据集
  • 可以创建惰性求值的数据流
  • 代码结构更加简洁易读

生成器的使用场景

场景描述
处理大数据集当数据量非常大以至于无法全部加载到内存中时,生成器可以逐个生成数据项
创建无限序列如自然数列、斐波那契数列等理论上没有终点的数据流
简化代码结构在某些情况下,使用生成器可以让代码更加简洁、易维护

生成器表达式 vs 列表推导式

类型语法是否立即执行示例特点
列表推导式使用方括号 []✅ 是[i * 5 for i in range(5)]立即计算结果并保存在内存中
生成器表达式使用圆括号 ()❌ 否(i * 5 for i in range(5))延迟计算,每次迭代才会生成一个值

示例代码:

li = [i * 5 for i in range(5)]
print(li)  # 输出: [0, 5, 10, 15, 20]gen = (i * 5 for i in range(5))
print(gen)  # 输出: <generator object ...>
print(gen.__next__())  # 输出: 0

生成器函数:yield 的作用

带有 yield 关键字的函数称为生成器函数。它不像普通函数那样返回一个值后就结束,而是可以在多个调用之间“暂停”和“恢复”。类似于中断函数。

yield 的特点:

  • 每次调用 next() 会从上次 yield 的位置继续执行
  • 保留函数的状态
  • 返回值不会被一次性计算出来,而是按需生成

示例代码:

def test():yield 'a'yield 'b'yield 'c'gen = test()
print(gen.__next__())  # 输出: a
print(gen.__next__())  # 输出: b
print(gen.__next__())  # 输出: c

可迭代对象、迭代器、生成器三者关系

名称定义特点
可迭代对象(Iterable)实现了 __iter__() 方法的对象可以用 for...in 遍历,如 liststrdict、迭代器、生成器
迭代器(Iterator)实现了 __next__() 方法的对象可以使用 next() 获取下一个元素
生成器(Generator)一种特殊的迭代器,由 yield 函数或生成器表达式产生自动实现 __iter__()__next__()

三者关系图示:

  • 可迭代对象包含迭代器迭代器包含生成器
可迭代对象 ⊃ 迭代器 ⊃ 生成器

实战对比:列表 vs 生成器处理大数据

比较两种方式处理一千万个数字(0~9999999),并对每个数字进行平方操作。

使用模块:

  • time:用于计时
  • sys:用于查看内存占用

代码如下:

import time
import sys# 方法一:使用列表
def use_list():start_time = time.time()numbers = [i for i in range(10_000_000)]  # 生成列表squares = [x * x for x in numbers]         # 计算平方end_time = time.time()print(f"【列表】耗时: {end_time - start_time:.4f} 秒")print(f"【列表】占用内存: {sys.getsizeof(numbers) + sys.getsizeof(squares)} 字节")# 方法二:使用生成器
def number_generator(n):for i in range(n):yield idef use_generator():start_time = time.time()gen = number_generator(10_000_000)squares = (x * x for x in gen)  # 生成器表达式,不会立即计算count = 0for square in squares:count += 1  # 强制执行生成器end_time = time.time()print(f"【生成器】耗时: {end_time - start_time:.4f} 秒")print(f"【生成器】生成器对象本身占用内存: {sys.getsizeof(gen)} 字节")# 运行测试
print("=== 开始测试 ===\n")
use_list()
print("\n------------------------\n")
use_generator()
print("\n=== 测试结束 ===")

结果分析(根据机器性能不同,数值可能略有差异):

指标列表方式生成器方式
内存占用非常大(约 184MB)极小(约 112B)
耗时略快略慢
是否适合大数据❌ 不适合✅ 非常适合

总结

生成器是一种强大而高效的工具,特别适用于:

  • 数据量庞大的场景
  • 需要延迟加载的场景
  • 需要节省内存的场景
  • 需要简化复杂迭代逻辑的场景

虽然生成器在速度上略逊于列表,但它在内存使用上的优势使其成为处理大规模数据的首选方式。

http://www.dtcms.com/wzjs/786078.html

相关文章:

  • 网上商店建设前准备关键词整站优化
  • 好的设计师网站有哪些做百度网站接到多少客户电话
  • 网站建设工程设计图网站对应不同域名
  • 服装电子商务网站版式设计ftp 网站 怎么上传
  • 电商网站支付体系建设特点wordpress 爱情模板下载
  • 安徽网站seo公司网站建设业务员的话术
  • 做一个营销型网站有哪些内容西部数码网站空间
  • 广州微网站开发企业网站建设费用会计科目
  • 我爱你域名的网站查建设公司年度保证金网站
  • 从化建网站企业网站建设费用入哪个科目
  • 秦皇岛英文网站建设短视频seo系统
  • 长春做网站的公司哪家好哪里的佛山网站建设
  • 网站开发 站长统计协会宣传网站开发方案
  • 做淘客网站的小程序的推广方法
  • 电脑怎么做服务器 网站前程无忧企业官方网站
  • 网站的根目录是什么网站设计的公司叫什么
  • 网站主办者有效证件电子件重庆网站制作定制
  • 学校网站建设方案及报价商丘网
  • 漳州 网站建设公司哪家好嘉兴seo排名外包
  • 上海网站建设规划关于学校网站建设的需求分析
  • 珠海网站哪家好企业seo排名
  • 用asp.net做的网站有哪些佛山移动网站设计公司
  • 福田网站建设设计工程公司名称大全大气好听
  • 做外贸有哪些免费的网站有哪些深圳seo搜索优化
  • 松江品划网络做网站网站制作公司哪家专业
  • 企业网站建设开发多少钱成都青羊区网站建设
  • 高校学校网站建设细胞医疗 网站模版
  • 怎么注册网站重庆招标信息网官网
  • 外贸网站建设厦门建设网站群
  • 南京集团网站建设古镇网站建设