Python生成器总结非常详细【新手入门必学】,建议收藏!

python之生成器 生成器 1.生成器 生成器(generator)也是一种迭代器,在每次迭代时返回一个值,直到抛出 StopIteration 异常。它有两种构造方式: (1).生成器表达式 和列表推导式的定义类似,生成器表达式使用 () 而不是 [] ,比如: 可以看出生成器表达式无法像列表推导式那样直接输出,它和可迭代对象一样只能采用for循环调用next()函数 (2).生成器函数 含有 yield 关键字的函数,调用该函数时会返回一个生成器。 可以看到,上面的函数没有使用 return 语句返 阅读详情

列表生成式
列表生成式是 python 内置的非常强大的可以用来生成列表的生成式。在学习生成器之前先来了解一下列表生成式,者有利于我们队生成器的理解。
在这里插入图片描述
列表生成式的语法格式如下

[exp for iter_var in iterable if_exp]
另外要注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你没有2020最新python入门到高级实战视频教程,可关注小编公众号:芝麻代理。回复:资料分享。即可免费获得。

列表生成式的实际执行过程如下:

  • 迭代 iterable 中的每个元素,每次迭代都先判断 if_exp 表达式结果为真,如果为真则进行下一步,如果为假则进行下一次迭代;
    把迭代结果赋值给 iter_var,然后通过 exp 得到一个新的计算值; 最后把所有通过 exp 得到的计算值以一个新列表的形式返回。
    如果迭代得到的元素无需过滤的话,if_exp 可以省略。

我们如果要生成一个 1 至 100 的整数的列表可以使用 list(range(1,101)), 如果要 1 到 100 的整数的平方我们可以使用循环来实现

list = []
for x in range(1, 101):
    list.append(x * x)

print(list)

除了使用选好我们还可以使用列表生成式来实现

list = [x * x for x in range(1, 101)]
print(list)

现在我们需要 1 至 100 中所有偶数的的平方,我们也可以使用列表生成式来实现

list = [x * x for x in range(1, 101) if x % 2 == 0]
print(list)

通过使用列表生成式我们可以写出简洁的代码来快速的初始化列表。

生成器
生成器从名字上来看可以理解为生成数据的工具。生成器按照某种特定的规则不断的生成数据,直到结束为止。

生成器的语法规则如下:

(exp for iter_var in iterable if_exp)

从形式上看生成器和列表生成式非常相似,生成器仅仅是将列表生成式的方括号换成了圆括号。而实际使用上却有很大的差别,列表生成式一次生成一个列表若列表的元素过多则占用很大的内存空间,而生成器一次仅生成一个元素即节省了内存空间又可以获取完整的列表内容。

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

list1 = [x * x for x in range(1, 20) if x % 2 == 0]
list2 = (x * x for x in range(1, 20) if x % 2 == 0)

print(type(list1))
print(type(list2))
print(list1)
print(list2)
for n in list2:
    print(n)
for n in list2:
    print(n)

以上代码执行结果如下:

<class 'list'>
<class 'generator'>
[4, 16, 36, 64, 100, 144, 196, 256, 324]
<generator object <genexpr> at 0x101163390>
4
16
36
64
100
144
196
256
324

从以上代码的执行结果我们可以看出,使用列表生成式即生成了一个完整的列表,包含了列表的所有元素;使用生成器产生的是一个生成器,本身未含有任何元素,当我们使用 for 循环进行迭代时可以获取生成器生成的整个列表的元素,但是生成器仅能迭代一次,迭代完成后将无法再获取内容,这也是迭代器的特性。
在这里插入图片描述

生成器解具有很多用途,在很多地方替代列表使用是一个不错的选择。特别是针对大量值的时候,列表占内存较多,生成器的优势就在于少占内存,因此无需将生成器实例化为一个列表,直接对其进行操作,方显示出其迭代的优势。

以上列表是比较简单的生成器,可以直接使用列表生成式修改得到,如果是比较复杂的生成器则需要使用包含 yield 的函数来实现。下面我们通过 yield 函数来实现上面的列表(包含 1 至 20 中所有偶数的平方)。

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

def even_squares(start, end):
    for n in range(start, end):
        if n % 2 == 0:
            yield n * n

list = even_squares(1, 20)
print(type(list))
print(list)
for n in list:
    print(n)

以上代码执行结果如下

<class 'generator'>
<generator object even_squares at 0x10aa38c00>
4
16
36
64
100
144
196
256
324
<class 'generator'>
<generator object even_squares at 0x10aa38c00>
4
16
36
64
100
144
196
256
324

从以上代码运行结果可以看出使用 yield 函数和使用列表生成式的生成器获取的结果完全相同。

生成器具有以下特点:
可以使用类似列表生成式的方式生成,也可以使用 yield 函数生成。生成器只在使用时才生成数据,可用来节省内存空间。生成器实际是一个特殊的迭代器,可以使用 for 循环进行迭代。只记录当前的位置,只能向前不能向后,「生成器只能使用一次,再次使用需重新初始化」。
最后注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你没有2020最新python入门到高级实战视频教程,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注:芝麻代理,并在回复:“资料分享”即可领取

【Python】列表生成器,请详细解释 你还可以在列表生成器中使用多重嵌套的循环结构。如果你希望生成大数据集而避免占用过多内存,可以使用生成器表达式代替列表生成器。生成器表达式会逐个计算元素而不是一次性加载到内存中,因此它在内存方面更加高效。循环生成列表和使用列表生成器是两种常见的方法,下面是它们的对比。通过列表生成器,你可以使用简单的语法在一行内生成新列表。计算每个数字的平方,最后把所有平方数存储到列表。你也可以在列表生成器中使用条件语句来筛选数据。作为条件语句,仅将偶数的平方添加到列表中。从上面可以看出,列表生成器通常比传统的。 阅读详情

相关推荐

Python学习之 ---生成器+生成器函数

生成器★★★★ 知识导图 生成器generator ● 生成器指的是生成器对象,可以由生成器表达式得到,也可以使用yield关键字得到一个生成器函数,调用这个函数得到一个生成器对象 ● 生成器对象,是一个可迭代对象,是一个迭代器 ● 生成器对象,是延迟计算、惰性求值的 生成器函数 ●函数体中包含yield语句的函数,就是生成器函数,调用后返回生成器对象. 生成器函数 def inc(): ...

等风来的博客 3179

Python 生成器(yield)

Python 生成器 一、生成器(generator) Python 的生成器是一种特殊的程序,可以被用作控制循环的迭代行为。生成器可以暂时挂起函数,并保留函数的局部变量等数据,然后在再次调用它的时候,从上次暂停的位置继续执行下去。 如果所要的序列的元素可以按照某种算法推算出来,可以采用迭代器一边循环一边计算的机制,这样就不必创建完整的序列,从而节省大量的空间。 Python 的生成器是迭代器...

Wang_Jiankun的博客 5901

什么是python的生成器

【前言】 我们可以通过列表生成式直接创建一个列表,但是受内存限制,列表的容量肯定是有限的。而且如果创建一个包含1000万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大数元素占用的空间都白白浪费了。 所以,如果列表元素可以按照某种算法推算出来,那么我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的内存空间。在python中这种一边循环一边计算的机制,称为生成器(Generator)。 所以说生成器也是一种迭代器,但是你只能对

Be_Nice的博客 2661

python迭代器和生成器

帮助大家深入了解迭代器与生成器

qq_52758588的博客 1万+

从零开始:用YOLOv8-Pose实现实时人体姿态检测(附完整代码)

本文提供了一份从零开始的完整实战指南,详细介绍了如何使用YOLOv8-Pose构建实时人体姿态检测系统。内容涵盖环境搭建、数据准备、模型训练与调优,以及高性能部署和进阶应用开发,并附有可直接运行的代码示例,帮助开发者快速掌握Pose Estimation技术并将其应用于实际项目。

h6i7j8的博客 619

MQTT与物联网平台(一):基础知识和设备接入物联网平台的实现(以华为云为例)

本文简单介绍了MQTT的基础知识和使用方法,以蓝牙WIFI双模芯片W801作为硬件设备,接入到华为云。

weixin_50622833的博客 1万+

python 函数—生成器

python生成器的详细解释,生成器适合用于处理大型数据

weixin_65289420的博客 4949

【全部更新】2025金地杯E题山西省大学生数学建模思路代码文章教学:高速铁路牵引供电系统能耗优化

问题四将列车的运行速度与发车时间同时作为优化变量,建立联合优化模型,目标是在考虑电价机制和调度均衡性的前提下,使牵引供电系统一天内的总电费支出最小。问题三在考虑分时电价机制的基础上,基于遗传算法优化列车速度组合,使牵引供电系统一天内的总电费支出最小。然而,在实际运营中,不同时段的电价差异显著,合理安排列车的运行时间与运行速度,可有效降低系统的总电费支出。本研究聚焦于高速铁路牵引供电系统的能耗与电费优化问题,针对列车运行速度、发车时间与分时电价的综合影响,提出一系列数学模型,以实现系统能耗与电费的最小化。

xb459149247的博客 5289

python中生成器

一.为什么要有生成器 秉着先问为什么,再问怎么做的原则,我们来看看为什么python会添加生成器这个功能。 python在数据科学领域可以说是很火。我想有一部分的功劳就是它的生成器了吧。 我们知道我们可以用列表储存数据,可是当我们的数据特别大的时候建立一个列表的储存数据就会很占内存的。这时生成器就派上用场了。它可以说是一个不怎么占计算机资源的一种方法。 二.简单的生成器 我们可以用列表推导(生成式)来初始化一个列表: list = [x*2 for x in range(10)] print(list)

仁化居之安 1904

机器人学习-matlab四足机器人控制仿真

《机器人学,机器视觉与控制》学习笔记 使用工具箱版本9.10 题目与解决思路: 【1】. 通过减少复位期间的抬腿高度来缩短复位的轨迹 Z轴向下,为了减小复位器件的抬腿高度,应当缩小△Z,故可以将示例程序中zu值调大。 【2】. 增加腿的步幅 腿的步幅可由改变x方向上腿前进和后退运动的极限来达到,令xf = 7; xb = -xf;即可。 ...

weixin_44609769的博客 5538

深入NAND Flash信号与接口:结合ONFI 5.0协议,聊聊DBI、ODT和差分信号到底在解决什么实际问题

本文深入探讨了NAND Flash信号与接口设计,结合ONFI 5.0协议,详细解析了DBI、ODT和差分信号等技术如何解决高速数据传输中的信号完整性问题。通过实际案例和数据,展示了这些技术在降低功耗、减少噪声和提升抗干扰能力方面的显著效果,为存储工程师提供了宝贵的实践参考。

weixin_33736649的博客 341

Python生成器新手入门指南

Python生成器入门摘要 生成器是Python中的特殊迭代器,提供按需生成值的惰性计算能力,适合处理大数据。创建方法有两种:(1)生成器表达式(x**2 for x in range(10));(2)使用yield的函数。生成器通过yield暂停/恢复执行,保持状态,具有内存效率高、支持无限序列和管道处理等优势。典型应用包括大文件处理、无限序列生成和数据库分批查询。注意生成器只能迭代一次,不支持索引。文末提供了四个实践练习:质数生成、日志追踪、多文件合并读取和数据库分批查询的实现方案

qq_53018080的博客 1152

ComfyUI实战:AnimateDiff与ControlNet结合,打造无缝风格化视频转绘

本文详细介绍了如何利用ComfyUI平台,结合AnimateDiff与ControlNet插件,实现高质量的视频风格化转绘。通过搭建节点工作流、调整关键参数,有效解决画面闪烁与失真问题,并分享了进阶玩法与常见问题解决方案,帮助用户轻松打造流畅、风格统一的动态视觉效果。

weixin_29039773的博客 334

Python进阶干货速递!【超详细迭代器、生成器、装饰器使用教程】

Python基础及进阶内容持续更新中!欢迎小伙伴们一起关注学习! 目录 写在前面 一、深入理解迭代器和生成器 1、什么是迭代?(Iteration) 2、迭代器(Iterator) (1)for 循环的迭代过程 (2)可迭代(Iterable)对象 (3)自定义迭代器 (4)迭代器的好处 3、生成器(Generator) (1)生成器表达式(Generator Expression) 二、生成器表达式和列表生成式 1、列表生成式 (1)列表生成式的写法 2、字典生成式 3.

累计发表博客60余万字,优快云 博客专家、Java 领域优质创作者、华为云享专家、阿里云专家博主。专注分享 Java 优质文章,毕设实战项目开发,全网粉丝10W+ 5413

VTK在QT与非QT环境下使用的区别

VTK可以在QT框架内使用,也可以独立于QT使用,这两种使用方式在架构、交互和渲染方面有显著差异。

深之JohnChen的专栏 628

ADAS工作原理解析:如何通过智能技术提升驾驶安全

ADAS通过集成传感器、摄像头、雷达、SoC计算单元以及高效的数据融合技术,提供了一系列主动和被动安全功能,如自动刹车、车道保持、自适应巡航控制等。这些功能共同作用,不仅减少了交通事故的发生,还大幅提升了驾驶员的驾驶体验和安全性。随着技术的进步,ADAS的功能将越来越智能,最终迈向全自动驾驶的未来🚗💨。

weixin_43199439的博客 1147

Python迭代器与生成器总结【建议收藏】

一、迭代器 通过iter()方法获得了list的迭代器对象,然后就可以通过next()方法来访问list中的元素了。当容器中没有可访问的元素后,next()方法将会抛出一个StopIteration异常终止迭代器。 字符串、列表或元祖对象都可用于创建迭代器。 迭代器是有限制的,例如:不能回到开始,也无法复制一个迭代器。因此要再次进行迭代只能重新生成一个新的迭代器对象。 __iter__()方法(iter())和__next__()方法(next()),这两个方法是迭代器最基本的方法:一个用来获得迭代器对象

路虽远,行则必至! 933

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

拜托!程序员必学的Python语法快收藏吧!

随着实践的深入,你将逐渐熟悉Python的高级特性和最佳实践,进一步提升自己的编程能力。:Python是动态类型语言,变量在首次赋值时自动确定类型,且变量名可以是字母、数字和下划线的组合,但不能以数字开头。:列表(list)、元组(tuple)、字典(dict)、集合(set),这些类型用于存储复杂的数据结构。:包括整数(int)、浮点数(float)、布尔值(bool)、字符串(str)。模式,自动管理资源(如文件操作、数据库连接等)的开启和关闭。类包含属性和方法,其中属性是类的变量,方法是类的函数。

pythonmadah的博客 924

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

python代码生成器代码大全_Python生成器总结非常详细【新手必学】

列表生成式列表生成式是 python 内置的非常强大的可以用来生成列表的生成式。在学习生成器之前先来了解一下列表生成式,者有利于我们队生成器的理解。列表生成式的语法格式如下列表生成式的实际执行过程如下:迭代 iterable 中的每个元素,每次迭代都先判断 if_exp 表达式结果为真,如果为真则进行下一步,如果为假则进行下一次迭代;把迭代结果赋值给 iter_var,然后通过 exp 得到一个新...

weixin_39747568的博客 1495

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

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

Python 生成器(generator)详细总结+示例

Python 生成器(generator)详细总结+示例

Jairo的博客 2万+

学点简单的Python之Python生成器

学点简单的Python之Python生成器   大家好,我叫亓官劼(qí guān jié ),在优快云中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在优快云中写博客,唯一博客更新的地址为:亓官劼的博客 ,同时正在尝试在B站中做一些内容分享,B站主页为: 亓官劼的B站主页 本文原创为亓官劼,请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 若需联系博主,可以联系本人微信:qiguanjie2015 什么是生成器?生成器能够做什么 在Python中,使用了yield的函

一起加油 1万+

Python生成器总结【非常详细】

列表生成式 列表生成式是 python 内置的非常强大的可以用来生成列表的生成式。在学习生成器之前先来了解一下列表生成式,者有利于我们队生成器的理解。 列表生成式的语法格式如下 [exp for iter_var in iterable if_exp] 列表生成式的实际执行过程如下: 迭代 iterable 中的每个元素,每次迭代都先判断 if_exp 表达式结果为真,如果为真则进...

Python学习Q群696455390 1307

超详细Python教程——生成器

而变成 generator 的函数,在每次调用 next() 的时候执行,遇到 yield语句返回,再次执行时从上次返回的 yield 语句处继续执行。但是,这个例子非常不适合使用生成器,发挥不出生成器的特点,生成器的最好的应用应该是:你不想同一时间将所有计算出来的大量结果集分配到内存当中,特别是结果集里还包含循环。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含 1000 万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

月流霜的专栏 1552

python高级进阶(超详细建议收藏)

注意:因为线程的数据是共享数据,不用Queue就能实现,所以也会存在一些弊端,因为线程是在进程间独立运行的,所以共享数据会有一定的延时性和不准确性,举例家里有10个馒头,2个孩子,第一个孩子拿走一个会记得还剩下9个,第二个孩子去拿的时候会记得还剩下8个,但是当第一个孩子再去拿的时候会发现只剩下7个了,但是之前明明还剩下9个,这样就会出现问题。注意:线程中的变量数据是可以共享的,进程与线程的区别在于,父子进程是两个单独的个体,子进程类似于直接拷贝的一份父进程的代码独立运行,相当于两个文件。

langjiaohjiopji的博客 1224

python 生成器

函数生成器 python函数中有yield关键字,函数就变成了生成器。 #!/usr/bin/env python3 #coding:utf8 def fun(): n=0 while True: n+=1 yield n g=fun() print(type(g)) print(next(g)) python3 g.py <class 'generator'> 1 案例 使用函数生成器打印斐波那契数列。 cat fib.py #!/usr/bin/

weixin_40548182的博客 5908

python68个内置函数_新手入门!68个Python内置函数建议收藏学习

内置函数就是Python给你提供的, 拿来直接用的函数,比如print,input等。截止到python版本3.6.2 ,一共提供了68个内置函数,本文将这68个内置函数综合整理为12大类,正在学习Python基础的读者一定不要错过,建议收藏学习!和数字相关1. 数据类型bool : 布尔型(True,False)int : 整型(整数)float : 浮点型(小数)complex : 复数2. ...

weixin_27869497的博客 1268
上一篇: Spring+MyBatis源码+Tomcat架构解析等
下一篇: 面试官:兄弟,说说Java到底是值传递还是引用传递?
pythonadiou
博客等级 码龄7年 19粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值