Python_生成器

         本文主要讲解python生成器的使用方法以及优点,对其背后的原理不进行深程度的研究。


 

目录

前言:

一 、生成器的创建

通过def&&yield

通过规则表达式

 二、生成器的使用及优势


前言:

        我们都知道数据存储在计算机里是需要耗费内存的。当我们需要遍历一组数据或对这一组数据进行操作时,事先生成好的数据,特别是当数据量很大的时候;我们或许一时用不上所有的数据,但是这些数据还是会占用计算机的内存空间。生成器可以为我们带来的是,每当我们需要一点数据时,取出一点数据,在需要时,再取出;有效的解决了空间浪费的问题。


生成器的创建

通过def&&yield

        在python语言中,生成器主要有两种。第一种也是最常用的一种是把函数中的return换成yield。python中数据生成器与函数的返回值不同。函数的返回值是一次性的返回所有结果;而数据生成器是当且仅当需要使用该数据时才会返回。当执行到yield语句时,会暂停并保存所执行的信息,返回yield后的语句;当再次调用生成器的数据时,会从yield后的语句开始执行。

def a():
	for i in range(5):
		it = [i]
		yield it
		it = []

如图所示:

        我们定义了一个生成器a,因为我们用到了保留字yield;如果将yield换成return,那么a就是一个函数,但是此时python会报错,因为后面还有一条it = [],当作为函数时没有对齐,不符合python语法。但是作为生成器的a没有任何问题,因为只有遍历a内的数据,才会执行a,然后返回yeild后的语句,再次获取a内的数据时,从yield再次开始执行。

        如上图所示,我们定义了一个数据生成器a,调用数据生成器赋值给b,此时的b就是一个生成器。

通过规则表达式

g = (x * x for x in range(10))

如图所示:g就是一个数据生成器。其中x*x就是一个规则表达式,g里面的所有元素都是通过这一规则表达式生成的。


 二、生成器的使用及优势

def b():
     for i in range(5):
          it = [range(i)]
          yield it
          it = []
          yield it
c = b()
for i in c:
     print(i)

如图所示,我们定义了一个函数生成器b并赋值给c,依次遍历c中所有的元素。

 

        从运行结果来看,正如我们在前文所描述的一样,生成器内原本并没有值,只是当我们需要生成器内的数据时,生成器才会从b内的yield返回值给我们。之后的yield = []是说当我们每取完一次it内的数据,就将it列表清空,可以理解为减少内存的占用;这样,当我们再次需要一组数据时,再次调用c内的数据(通过for循环),这时生成器会从yield处继续执行。继而在获取数据的同时减少了内存的占用。

具体过程如下:

 

参考:https://www.runoob.com/python3/python3-iterator-generator.html

           https://www.cnblogs.com/liangmingshen/p/9706181.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值