2020-12-05

第五次笔记 方便的生成器##

python生成器是非常重要的部分之一,它可以更加方便的帮助我们进行一边循环,一边运算!
Python 生成器
1、定义通过列表生成式(列表推到式),我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面的绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算除后续的元素呢?在Python中,这种一边循环一边计算的机制,称为生成器,generator。
2.为什么要有生成器

秉着先问为什么,再问怎么做的原则,我们来看看为什么python会添加生成器这个功能。

python在数据科学领域可以说是很火。我想有一部分的功劳就是它的生成器了吧。

我们知道我们可以用列表储存数据,可是当我们的数据特别大的时候建立一个列表的储存数据就会很占内存的。这时生成器就派上用场了。它可以说是一个不怎么占计算机资源的一种方法。
3.怎样创建生成器

在一个一般函数中使用yield关键字,可以实现一个最简单的生成器,此时这个函数变成一个生成器函数。yield与return返回相同的值,区别在于return返回后,函数状态终止,而yield会保存当前函数的执行状态,在返回后,函数又回到之前保存的状态继续执行。

4.生成器函数与一般函数的不同:

生成器函数包含一个或者多个yield
当调用生成器函数时,函数将返回一个对象,但是不会立刻向下执行
像__iter__()和__next__()方法等是自动实现的,所以我们可以通过next()方法对对象进行迭代
一旦函数被yield,函数会暂停,控制权返回调用者
局部变量和它们的状态会被保存,直到下一次调用
函数终止的时候,StopIteraion会被自动抛出

5.生成器的思维导图
在这里插入图片描述

6.总结:
所有需要返回序列对象的函数都可以使用生成器。
使用生成器比收集结果放入列表然后返回的方式更加简练清晰。
生成器函数返回的是一个迭代器,可以把传给yield些值,逐次产生出来。
生成器不会影响内存的消耗,特别适合于处理大数据文件、大的数据对象等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值