生成器-yield

news/2024/11/18 17:42:00/文章来源:https://www.cnblogs.com/pmna/p/18553241

yiled 返回一个迭代对象 ,作用在函数里,其作用类似于return

yield 是 Python 中的一个关键字,用于定义生成器。生成器是一种特殊的迭代器,它可以逐步生成值,而不是一次性返回所有值。使用 yield 可以提高程序的效率,特别是在处理大量数据时,因为它允许你在需要的时候生成数据,而不是一次性将所有数据加载到内存中。

生成器与普通函数的区别

  • 普通函数:使用 return 返回一个值后,函数的执行结束,不能再继续。
  • 生成器函数:使用 yield 返回一个值,但生成器的状态会被保存,可以在后续再次调用时从上次返回的位置继续执行。

生成器的基本用法

1. 定义生成器函数

生成器函数的定义与普通函数相似,但它使用 yield 代替 return

def count_up_to(n):count = 1while count <= n:yield countcount += 1

2. 调用生成器

生成器函数返回一个生成器对象,而不是立即执行函数体。

counter = count_up_to(5)# 通过迭代器访问生成器的值
for number in counter:print(number)

输出:

1
2
3
4
5

3. 生成器的特性

  • 惰性求值:生成器只在需要时生成值,因此它们非常适合处理大数据集或无限序列。
  • 节省内存:由于生成器不需要一次性存储所有值,它们的内存占用通常比列表等数据结构要小得多。
  • 状态保持:生成器函数的执行状态会被保留,当再次调用生成器时,它会从上次的 yield 语句继续执行。

4. 使用场景

  • 大数据集处理:处理大文件时,可以逐行读取,而不需要一次性加载到内存中。
  • 流数据处理:实时数据流处理时,生成器可以逐步处理数据。
  • 协程:生成器还可以用于实现简单的协程,通过 yield 暂停和恢复函数执行。

5. 生成器表达式

除了定义生成器函数,还可以使用生成器表达式来创建生成器,语法类似于列表推导式,但使用小括号。

squares = (x * x for x in range(10))for square in squares:print(square)

输出:

0
1
4
9
16
25
36
49
64
81

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/836266.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

旺仔水饺-冲刺日志 Day 6

作业所属课程 https://edu.cnblogs.com/campus/fzu/SE2024作业要求 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13305团队名称 旺仔水饺102201140 黎曼 102201138 黄俊瑶102201127 罗永辉 102201130 郑哲浩102202144 傅钰 102202147 赖越172209028 伊晓 052101418 陈…

服务器时间不对导致.NET SDK连接Minio失败

这两天想弄个简单的文件系统来做测试,选中了Minio,公司的测试环境是windows server2019,随手搜起一篇教程(MinIO注册成服务在后台运行(Win10)_minio windows 注册成服务在后台运行-CSDN博客),按图索骥,一顿操作猛如虎, 使用“WinSW”加入系统服务。打开网页一看,好使。…

关于成人自学考试的一些建议

关于自己能不能坚持考完自考这条路来说,你需要考虑你能否坚持1-6年的自考流程 关于答卷分数的问题,只是公布分数,不公布对错,次次考试要么分数很低, 要么分数高的离谱,严重怀疑分数评判的标准。真实性 本人考试了5年,疫情耽误1年,工商管理的课程,选考3科 比英语还难。…

8.8

from scipy.integrate import odeint import numpy as np import pylab as plt yx = lambda y,x: [y[1], np.sqrt(1+y[1]**2)/5/(1-x)] x0 = np.arange(0, 1, 0.00001) y0 = odeint(yx, [0,0], x0) plt.rc(font, size=16) plt.plot(x0, y0[:,0]); plt.show() 2023310143007

DML

1.通过使用insert into 表名 values(值1,值2,值3)如果插入的数据与列一一对应,那么可以省略列名,但如果希望向指定列上插入数据,就需要写出列名 2.insert into 表名(列名1,列名2)values(值1,值2);也可以一次性向数据库中插入多条数据 3.insert into 表名(列名1,列名…

多部门协作效率低下?项目管理工具能帮你解决!

在现代企业中,不同部门间的协作日益成为工作成功的关键。无论是市场部、产品部,还是运营部、财务部,部门之间的高效协作能显著提升整体产出,避免信息孤岛与资源浪费。然而,在实际工作中,跨部门合作常常面临各种挑战,比如沟通不畅、信息分散、目标不一致等。而项目管理软…

修改IDEA中Servlet创建的模板

一、原Servlet模板创建出来的格式样式二、按图步骤修改注释参数 1.点击File->选择Settings,按下图步骤进入设置项。修改前的模板样式2.修改类创建时的默认方法三、重新创建Servlet时,新模板样式

202222313 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1. 实验内容 1.1 实验要求 (1)掌握metasploit、nmap的用法。 (2)学习前期渗透的方法。 (3)利用4个漏洞,实现对靶机的攻击。 1.2 学习内容 (1)metasploit的用法:可以简单总结为“Search-Use-Show-Set-Exploit/run”。 (2)四种漏洞的原理。Vsftpd源码包后门漏洞:在特定版本的v…

创建表(1)

1.切换操作的数据库,默认是在MySQL中进行操作2.创建表,遵循固定格式,枚举可用enum(‘’,‘’)限制条件可用notnull 默认可设置default‘ ’3.修改表:可以用alter table进行修改 alter table 表名 add 列名 数据类型 列级约束条件; alter table 表名 drop column 列名 …

Flutter项目实战(1):通用项目框架搭建

下面介绍 Flutter 最基本的通用项目框架搭建,同时实现了一个登录界面图标和登录界面。 先看下效果图:使用ScreenUtilInit自适应界面大小; 使用Stack支持多个子界面在同一个全屏主界面上选择显示; 使用 Get 插件实现界面之间的跳转和国际化翻译; 界面都通过Transform实现了…

Rocky安装htop

本篇抄的,放在这里防止自己忘记 两条命令: dnf install epel-release -y dnf install htop -yhtop测试: [root@localhost ~]# htop //回车后出现如下图,按q退出