生成器是什么----我爷爷都看得懂!

JAVA代码生成器实战 | 2024.04.21 | 详解JDK11兼容分支的创建与多版本JDK适配策略 本文详细介绍了如何在JAVA代码生成器项目中创建JDK11兼容分支,并实现多版本JDK适配策略。通过SpringBoot版本锁定、依赖隔离和构建配置调整,解决JDK8、JDK11等不同版本的兼容性问题,提升项目在企业生产环境中的适用性。 阅读详情

生成器是 Python 初级开发者最难理解的概念之一,虽被认为是 Python 编程中的高级技能,但在各种项目中可以随处见到生成器的身影,你得不得去理解它、使用它、甚至爱上它。

提到生成器,总不可避免地要把迭代器拉出来对比着讲,生成器就是一个在行为上和迭代器非常类似的对象,如果把迭代器比作 Android 系统,那么生成器就是 iOS,二者功能上差不多,但是生成器更优雅。

什么是迭代器

顾名思义,迭代器就是用于迭代操作(for 循环)的对象,它像列表一样可以迭代获取其中的每一个元素,任何实现了 __next__ 方法
(python2 是 next)的对象都可以称为迭代器。

它与列表的区别在于,构建迭代器的时候,不像列表把所有元素一次性加载到内存,而是以一种延迟计算(lazy evaluation)方式返回元素,这正是它的优点。比如列表含有中一千万个整数,需要占超过400M的内存,而迭代器只需要几十个字节的空间。因为它并没有把所有元素装载到内存中,而是等到调用 next 方法时候才返回该元素(call by need 的方式),本质上 for 循环就是不断地调用迭代器的next方法。

以斐波那契数列为例来实现一个迭代器:

class Fib:
    def __init__(self, n):
        self.prev = 0
        self.cur = 1
        self.n = n

    def __iter__(self):
        return self

    def __next__(self):
        if self.n > 0:
            value = self.cur
            self.cur = self.cur + self.prev
            self.prev = value
            self.n -= 1
            return value
        else:
            raise StopIteration()

f = Fib(10)
print([i for i in f])
#[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:609616831


什么是生成器

知道迭代器之后,就可以正式进入生成器的话题了。普通函数用 return 返回一个值,和 Java 等其他语言是一样的,然而在 Python 中还有一种函数,用关键字 yield 来返回值,这种函数叫生成器函数,函数被调用时会返回一个生成器对象,生成器本质上还是一个迭代器,也是用在迭代操作中,因此它有和迭代器一样的特性,唯一的区别在于实现方式上不一样,后者更加简洁

最简单的生成器函数:

>>> def func(n):
...     yield n*2
...
>>> func
<function func at 0x00000000029F6EB8>
>>> g = func(5)
>>> g
<generator object func at 0x0000000002908630>
>>>

func 就是一个生成器函数,调用该函数时返回对象就是生成器 g ,这个生成器对象的行为和迭代器是非常相似的,可以用在 for 循环等场景中。注意 yield 对应的值在函数被调用时不会立刻返回,而是调用next方法时(本质上 for 循环也是调用 next 方法)才返回

>>> g = func(5)
>>> next(g)
10

>>> g = func(5)
>>> for i in g:
...     print(i)
...
10

那为什么要用生成器呢?显然,用生成器在逼格上要比迭代器高几个等级,它没有那么多冗长代码了,而且性能上一样的高效,为什么不用呢?来看看用生成器实现斐波那契数列有多简单。

def fib(n):
    prev, curr = 0, 1
    while n > 0:
        n -= 1
        yield curr
        prev, curr = curr, curr + prev

print([i for i in fib(10)])
#[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

生成器表达式

生成器表达式与列表推导式长的非常像,但是它俩返回的对象不一样,前者返回生成器对象,后者返回列表对象。

>>> g = (x*2 for x in range(10))
>>> type(g)
<type 'generator'>
>>> l = [x*2 for x in range(10)]
>>> type(l)
<type 'list'>

前面已经介绍过生成器的优势,迭代大数据时,显然生成器更合适。

如果还没理解,那么可以来Python学习群:609616831,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2020最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

对LSTM中每个batch都初始化隐含层的理解 不知道有没有人和我有一样疑惑 在LSTM相关的代码中,为什么每个batch都会将隐藏层重新初始化, 这样不会把以前训练出来的参数丢掉吗?? 比如 代码来自GitHub 看了一些解释是h与c是状态,不是参数,每个batch中都需要初始化为0,LSTM 中的参数是W,b。 网络中训练的是参数,不是状态。 说真的。。。当时我没怎么看懂。。。 咨询了实验室的师兄后,我有了自己的理解 产生误解的主要原因是我对RNN和LSTM的结构理解不深入,我们通常看到RNN结构图基本都是这样的 ... 阅读详情

相关推荐

ROS自定义地图实战:从CAD到导航的完整流程

本文详细介绍了如何将CAD图纸或手绘草图高效转换为ROS机器人可直接使用的导航地图。通过解析PGM与YAML标准格式,提供从图像处理、尺度校准到集成AMCL与move_base导航栈的完整实战流程,帮助开发者跳过繁琐的SLAM建图,实现快速、精准的自定义地图部署。

weixin_29083475的博客 496

python yield的返回值

初识yield表达式是在生成器学习中,只要函数中出现yield表达式,那么这个函数就是生成器函数。当函数执行到yield那一行时,yield就会返回后面的值,然后冻结当前函数状态,下行代码不执行,等下一次调用再唤醒接着往下执行。 先来个简单生成器函数: def my_gen(): yield 1 yield 2 yield 3 用next方法...

ruanxuan的博客 7915

做小程序支付时,我是怎么被“虚拟支付”绊了一跤的

微信小程序支付开发中,普通支付与虚拟支付存在本质差异。开发者常误将虚拟权益(会员、点数等)当作普通商品支付,导致审核失败。两者在审核关注点、结算方式、API调用及平台政策上都截然不同。关键点在于:1)先明确交易对象类型;2)产品命名需真实反映权益性质;3)支付成功≠业务完成;4)审核说明要详细描述交付逻辑;5)避免依赖过时规则。正确顺序应是:判断商品属性→选择支付类型→设计订单系统→准备审核材料。这个认知差异比技术实现更重要,提前理解平台规则可大幅减少返工。

zhurizhe71的学习之路 2582

不一样的函数返回值~yield关键字*核心讲解(内含debug的git图展示)

python中的函数返回值除了可以用众多语言通用的return返回,也可以采用yield中断(实现暂停等待__next__方法的值返回)返回。 所以,本文意在对两种返回方式的比较以及对yield执行方式的跟踪。(末尾也包含对yield返回的数据的类型判断)

笔岸柳影 787

CLIP-Count代码配置以及踩坑记录

CLIP-Count代码配置以及踩坑记录

学术菜鸡 1011

如何使用3D高斯分布进行环境建模

使用3D高斯分布来进行建模,关键在于通过引入不确定性描述来提高建图的鲁棒性和精度。与传统点云表示相比,3D高斯分布提供了一种更为灵活和有效的方式来处理空间数据,能够通过协方差矩阵表示点的空间不确定性,帮助优化SLAM过程中的定位和地图更新。

JaydenQ的博客 2355

python 之 看yield的返回值

<br />含有yield的函数就是生成器,不是普通的函数。生成器包含有迭代器,“雨果”不明白什么是生成器和迭代器参见<br />http://blog.youkuaiyun.com/xiaofeng_yan/archive/2010/09/27/5910215.aspx<br />下面重点说一下,怎么看 yield 的返回值。<br />大家要记住,看yield的值必须在循环里,因为只有在循环里才能使yield返回值或者具有可迭代的函数里如列表。<br />比如:<br />def test(lst):<br />

xiaofeng_yan的专栏 5511

告别Keil!用VSCode+PlatformIO玩转STC单片机(附自动下载配置)

本文详细介绍了如何从Keil迁移到VSCode+PlatformIO进行STC单片机开发,包括环境搭建、自动下载配置等实用技巧。通过对比传统IDE与现代工具链的差异,展示了VSCode+PlatformIO在代码编辑体验、跨平台支持和开发效率上的优势,帮助开发者实现更流畅的STC单片机开发流程。

weixin_27252001的博客 458

python中yield和return异同点

在 Python 中,yield 和 return 都用于函数的返回值,但它们之间有一些重要的区别。 相同点: 两者都用于从函数中返回值。 在执行到 yield 或 return 语句后,函数会立即结束。 不同点: return 语句用于在函数中直接返回一个值,并且终止函数的执行。当函数执行到 return 语句时,会将值返回给调用方,并且不再执行函数中的其他语句。

qq_45711921的博客 601

S32K1XX Autosar开发实战|全网独家复现EB MCAL Port/Dio配置、详解引脚分层原理、实现经典跑马灯助力车载IO电控落地

在NXP S32K1XX系列车规MCU的AUTOSAR标准开发体系中,MCAL(微控制器抽象层)是软硬件解耦的核心载体,而Port端口模块与Dio数字IO模块是MCAL最基础、最核心的入门模块,也是车载指示灯、按键检测、继电器驱动、外设硬件启停控制的底层支撑。区别于传统裸机直接操作寄存器的开发方式,AUTOSAR架构采用分层隔离设计,Port负责硬件静态初始化、Dio负责动态电平操控,严格遵循车规级开发规范,杜绝硬件资源冲突、引脚配置混乱等问题。

getusushu的博客 43

第3版•系统集成项目管理工程师(中级) │ 告别迷茫!案例分析高分攻略

🥏第3版•系统集成项目管理工程师(中级) │ 告别迷茫!案例分析高分攻略

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3870

【Python 3】什么时候使用yield而不是return?

1 分析 (1)yield语句将中止函数的执行并将一个值发送回调用方,但保留足够的状态以使函数可以在中断的地方继续执行。恢复后,该函数将在最后一次运行后立即继续执行。这使它的代码可以随着时间的推移产生一系列值,而不是立即计算它们并像列表一样将它们发送回去。 yield在Python生成器中使用。生成器函数的定义类似于普通函数,但是每当需要生成一个值时,它都使用yield关键字而不是return来这样做。如果def的主体包含yield,该函数将自动成为生成器函数。 (2)Return将指定的值发送回其调用方,

BetterBench的博客 909

跨应用服务器的自定义 IDoc 传输实战:以 CATSDB 工时为例,打通两套 SAP 系统的数据通道

本文介绍了在企业多SAP系统环境下,使用SAP ALE/IDoc技术实现工时数据跨系统传输的解决方案。文章从技术选型、系统架构到具体配置步骤进行了详细说明,重点阐述了IDoc/ALE在异步传输、全链路追踪和数据重放方面的优势。 文章详细讲解了端到端实施流程,包括Logical System配置、RFC Destination创建、Message Type定义、Segment和Basic Type设计等关键步骤。同时提供了出站封装的ABAP代码示例,强调调用MASTER_IDOC_DISTRIBUTE函数后执

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 173

P3793 由乃救爷爷 题解

大家看过葫芦娃吧?没看过也没关系,让由乃告诉你吧传说明斯克航空航天局里关着两个坦克,strv103b和krv。鼠爷不小心打破了明斯克航空航天局,两个坦克逃了出来,从此其他坦克过上了水深火热的生活。明斯克航空航天局急忙去告诉一个叫做serb的光头,只有YY出七辆图纸车,才能消灭这两个卖头势力。serbYY出了七个连图纸都没有的车,却被瑞典人从bbs中窥见。他们摧毁不了这七个YY车,就把serb和鼠爷抓去。但是这时候七个坦克模型已经建出来了。

bz02_2023f2的博客 523

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

设计模式——0_2 生成器(Builder)

将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。

乡亲们啊的博客 1468

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

3分钟搭建儿童密码生成器原型

现在小朋友已经用这个工具给自己的所有账号设置了「霸王龙2024」系列密码,整个过程就像玩游戏一样简单。如果你也想快速验证类似创意,不妨试试这个零门槛的开发平台,从想法到上线真的只要一根棒棒糖的时间~最近想给家里小朋友设计一个专属密码生成器,既要操作简单又要界面可爱。传统开发从环境搭建到部署至少半天起步,而用。复制按钮绑定剪贴板API并添加「 copied!添加姓名输入框时特别设置超大字体和圆角边框。

ObsidianRaven13的博客 815

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

GPEN镜像真实体验:修复爷爷的老照片太震撼了

本文介绍了如何在星图GPU平台上自动化部署GPEN人像修复增强模型镜像,高效修复严重退化的老照片。用户无需配置环境,通过一键部署即可运行,典型应用于家庭老照片修复——如清晰还原爷爷1978年黑白照中的人脸结构、皮肤纹理与服饰细节,让模糊记忆重获真实质感。

weixin_33240461的博客 111

python代码解读器_python文章生成器(附源码+讲解)

移动端建议收藏后在pc端查看最近在看到网上的【营销号生成器】和【狗屁不通生成器】。前者确实是营销号的口吻,但是竟然连模板都是写死的;后者也如其名,的确“狗屁不通”。于是结合当前对python的学习,打算自己写一个更有灵魂的。代码难度不高,适合学习交流。废话不多说,上效果:控制台输出内容emm...图片可能太小影响观看,简单介绍一下吧。生成文章之前,首先输入动词和名词,这里动词输入的是“刷”,名词输...

weixin_35698805的博客 988

luogu P3793 由乃救爷爷

区间RMQ 所以为什么笛卡尔树可以*过去? 随便写一发就过了 可能是笛卡尔树期望常数比较小吧 code: #include<bits/stdc++.h> #define N 20000005 using namespace std; namespace GenHelper { unsigned z1,z2,z3,z4,b; unsigned rand_() { b=((z1<<6)^z1)>>13; z1=((z1&4294

lahlah的博客 421

ES6生成器js详解(1)

生成器其实就是特殊函数,纯回调函数,可以进行异步编程,比如ajax,mongodb 注意,一定要带*才是这种哦 function * gen(){ console.log("吴亦凡很大"); } let iterator=gen(); console.log(iterator);//返回一个迭代器方法 iterator.next();//输出吴亦凡 我们在尝试一下怎么迭代里面的数据 //由于他是一个迭代器的过程,所以他可以控制代吗运行 function

不想内卷的博客 117

AI亲子旅行故事书生成器

尝试部署了这个项目,发现他们的AI模型能很好地支持这类多模态处理需求。不用自己搭建复杂的环境,上传代码后直接就能生成可访问的在线版本,特别适合快速验证创意。对于想尝试类似项目的开发者,推荐体验下这种全流程在线的开发方式。每次带孩子旅行回来,照片散落在手机里,想整理成有趣的故事书却总没时间?最近我尝试用AI工具做了一个亲子旅行故事书生成器,效果意外地好,分享下实现思路和关键步骤。整个过程最惊喜的是图像风格转换效果,原本普通的游客照变成了真正的绘本插图,孩子看到后特别兴奋。提取活动特征(野餐、游泳等动作识别)

OnyxTiger47的博客 828

燃爆,100个Python实战小项目汇总!

每一篇文章都是一个知识点,一个小小的代码实践,总有一篇是你想要的!小实战全网首发!华为任正非,近20年400多段高清音频演讲故宫下雪了!我花了45秒,用Python给它画了一组手绘图2....

zandaoguang的博客 3907

我用 AI 给黑白老照片上了色:基于 DeOldify 的图像修复实战,爷爷奶奶看哭了

本文介绍了使用DeOldify AI工具为黑白老照片上色的实践体验。作者通过翻出爷爷奶奶年轻时的黑白合影,萌生了用AI技术还原色彩的念头。DeOldify采用独特的NoGAN训练方法,结合生成对抗网络优势,提供稳定自然的色彩还原效果。文章详细介绍了三种预训练模型(艺术型、稳定型、视频型)的适用场景,并以Stable模型为例,展示了从在线体验到本地部署的三种使用方式,包括核心代码片段和参数调整建议。最终上色效果让爷爷奶奶认出了当年的服装颜色,体现了技术连接过去与现在的温情价值。作者指出AI上色虽非百分百准确,

IT老农民的博客 229

智能作文生成器:30秒搞定写作

摘要:本文介绍了一款Python作文生成小程序,通过模板引擎和关键词填充实现作文框架自动生成。程序提供记叙文和议论文两种模板,用户输入关键词后,系统优先使用用户词汇填充模板空缺,并辅以内置词库生成完整框架。实现原理包括字符串替换、随机选择和交互式引导,支持用户二次创作扩展。该工具适合写作初学者,可帮助建立文章结构思维,代码简洁无需额外依赖,易于修改扩展。(148字)

dujianhuaw的博客 369

python学习day-8 迭代器 生成器 装饰器

http://www.cnblogs.com/linhaifeng/articles/7580428.html 迭代器#迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 1、为何要有迭代器? 对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,若还想...

weixin_33766805的博客 120

迭代器,三元表达式和列表推导式,字典生成式,生成器,递归

迭代器 迭代的工具。迭代是更新换代,如你爷爷生了你爹,你爹生了你,迭代也可以说成是重复,并且但每一次的重复都是基于上一次的结果来的。如计算机中的迭代开发,就是基于软件的上一个版本更新。 可迭代对象 对于这一切的对象中,但凡有__iter__方法的对象,都是可迭代对象。 # x = 1.__iter__ # SyntaxError: invalid syntax # 以下都是可迭代的对...

anlou1537的博客 182
上一篇: 十行代码将多张Excel合并为一张
下一篇: 入门Python这几本书必看!
python阿喵
博客等级 码龄6年 169粉丝 127原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值