当前位置: 首页 > 后端技术 > Python

python生成器总结【很详细】

时间:2023-03-25 19:35:05 Python

列表生成listgeneration是python内置的一个非常强大的生成器,可以用来生成列表。在学习生成器之前,我们先来了解一下列表生成,这对我们对生成器的理解会有帮助。列表推导式语法格式如下[expforiter_variniterableif_exp]列表推导式实际执行过程如下:迭代iterable中的每个元素,判断if_exp表达式结果为真对于每次迭代,如果为真,则进行下一步,如果为假,则进行下一次迭代;将迭代结果赋值给iter_var,然后通过exp得到一个新的计算值;最后以新列表的形式返回所有通过exp得到的计算值。如果迭代的元素不需要过滤,if_exp可以省略。如果我们想生成一个从1到100的整数列表,我们可以使用list(range(1,101)),如果我们想对1到100的整数进行平方,我们可以使用循环来实现list=[]forxinrange(1,101):list.append(x*x)print(list)除了使用选择,我们还可以使用列表生成来实现list=[x*xforxinrange(1,101)]print(list)现在我们需要1到100内所有偶数的平方,我们也可以用list生成来实现list=[x*xforxinrange(1,101)ifx%2==0]print(list)通过使用列表生成我们可以编写简洁的代码来快速初始化列表。生成器从名字上看,生成器可以理解为生成数据的工具。生成器按照特定的规则不断生成数据,直到结束。生成器的语法规则如下:(expforiter_variniterableif_exp)从形式上看,生成器与列表生成非常相似,生成器只是将列表生成的方括号换成了圆括号。但是在实际使用中却有很大的区别。如果列表生成器一次生成一个列表,如果列表中的元素过多,会占用大量的内存空间,而生成器一次只生成一个元素,节省了内存空间,可以获得一个完整列表。列出内容。#!/usr/bin/envpython3#-*-coding:utf-8-*-list1=[x*xforxinrange(1,20)ifx%2==0]list2=(x*xforxinrange(1,20)ifx%2==0)print(type(list1))print(type(list2))print(list1)print(list2)forninlist2:print(n)forninlist2:print(n)上面代码的执行结果如下:[4,16,36,64,100,144,196,256,324]at0x101163390>4163664100144196256324从上面代码的执行结果可以看出,利用列表生成公式生成了一个完整的列表,包括列表的所有元素;使用生成器生成生成器,生成器不包含任何元素。当我们使用for循环进行迭代时,我们可以得到生成器生成的整个列表的元素,但是生成器只能迭代一次,迭代完成后就不能再获取内容了,这也是特性的迭代器。生成器解决方案有很多用途,并且是在许多地方代替列表使用的不错选择。尤其是对于大量的值,list占用内存较多,而generator的优点是占用内存少。因此,没有必要将生成器实例化为一个列表,直接对其进行操作,以显示迭代的优势。上面的list是一个比较简单的generator,直接使用listgeneration修改即可。如果是比较复杂的生成器,需要使用包含yield的函数来实现。下面我们通过yield函数实现上面的列表(包括1到20的所有偶数的平方)。#!/usr/bin/envpython3#-*-编码:utf-8-*-defeven_squares(start,end):forninrange(start,end):ifn%2==0:yieldn*nlist=even_squares(1,20)print(type(list))print(list)forninlist:print(n)上面代码的执行结果如下4163664100144196256324从上面的代码运行结果可以看出,使用yield函数和使用list-generatedgenerator得到的结果是完全一样的。生成器具有以下特点:可以采用类似列表生成的方式生成,也可以使用yield函数生成。生成器仅在使用时才生成数据,可用于节省内存空间。生成器实际上是一种特殊的迭代器,可以用for循环进行迭代。只记录当前位置,只能前进不能后退。“生成器只能使用一次,再次使用时需要重新初始化。”最后注意:无论你是为了Python就业还是爱好,记住:项目开发经验永远是核心。为解决初学者的学习难点,专门成立的Python学习扣QUN:⑧⑤⑤-④零⑧-⑧⑧③从零开始项目Python各领域的实战教程、开发工具和电子书。与大家分享公司目前对python人才的需求和学好python的高效技能,持续更新最新教程