千家信息网

python里的生成器--yield

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,Python的生成器是个很强大的东西,特别是在python3.0版本以后。以最简单的方式让大家快速理解生成器。1、正常的写法来看个例子,比如输出一个自定义长度的列表一般这么写:这里传入的参数时10,所
千家信息网最后更新 2025年02月05日python里的生成器--yield

Python的生成器是个很强大的东西,特别是在python3.0版本以后。以最简单的方式让大家快速理解生成器。

1、正常的写法
来看个例子,比如输出一个自定义长度的列表一般这么写:

这里传入的参数时10,所以会得到一个包含10个元素的列表:

那当我传入的是10W的时候,那生成的这个列表就很大了,也占内存,运行脚本也占cpu。

2、改良后写法
改良一下代码,把他写成一个迭代的类:

这里面self.b就记录了每次执行next方法的位置,知道每次是第几次执行next方法,所以执行保证了每次输出的是期望的值,其实这就是迭代了,每运行一次函数都被记录已运行的状态。当被调用的时候才返回值,否则就处于等待被调用的状态
运行结果:

所以这改良后的代码就解决了当你输入10W的时候占用资源的问题,因为输入10W后,只要当调用next函数的时候才返回值,不是一次返回一个那么大的列表出来。
3、生成器
那么第二步中的代码跟第一步比起来又太多了感觉,那么生成器就来了

再改良代码:

只需改下第一步中的代码a.append(n)为yield n,这就是一个生成器了,然后通过for语句来调用生成器的值。

任何一个带有yield语句的函数都是生成器,当你直接调用这个函数时,内部的代码是不会被执行的,只有调用yield里面的next函数才会去执行代码,for循环也就是会自动去调用这个next函数来输出值。

可以理解为一个函数被yield中断了,下载再次调用时继续从上一次中断的位置继续执行代码并返回值。

讲的比较简单,不知道大家理解了没有。

生成 代码 生成器 函数 时候 运行 输出 位置 写法 就是 方法 状态 语句 输入 迭代 强大 很大 一次函数 东西 也就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全问题的应对方法 思特沃克软件开发工程师工资 数据库怎么创建复合组件 重庆课堂直播软件开发 贵广网络技术支持岗待遇 崇明区环保网络技术解决方案 公司网络安全监控范围 数据库系统及应用第二版 盐城有几个服务器 软件开发潮流工具 服务器正在运行是什么意思 达梦数据库证书收费标准 聚焦网络技术官网 微信提示数据库占用空间过大 知众互联网络技术有限公司 网络安全法作用和意义 网络安全保障先进个人 唐山森联互联网科技有限公司 太白山天气预报软件开发 数据库设计架构推荐知乎 服务器管理器事件告警 机械软件开发教学 查看当前服务器上有无mysql 光纤交换机存储服务器架构 如何找自己电脑的服务器地址 莫让网络安全成噩梦教育提纲 中国网络安全教育官网 hp服务器bios升级 数据库模式定义语言是 合肥市网络安全展馆
0