Python--生成器

本文详细介绍了Python中的生成器,包括生成器的作用、创建方法和使用方式。生成器通过惰性运算避免了大量数据存储导致的内存问题。创建生成器的方式有两种:生成式和包含`yield`的函数。使用`next()`、`__next__()`或`for`循环可以获取生成器中的值。`yield`关键字使得函数暂停并返回值,再次调用时从上次暂停的位置继续执行。此外,还讨论了`yield`的`send`操作,允许传递消息给生成器。最后,文章强调了生成器的惰性和一次性特性,生成器只能遍历一次,之后无法再次获取值。
摘要由CSDN通过智能技术生成

生成器

      在python中,如果进行较大数据的存储,如果直接存储在列表之中,则会可能造成内存的不够,与速度的减慢,因为列表创建完是立即创建并存在的,而在python中生成器(generator)能够很大程度上解决这个问题,生成器并不一开始直接创建所有的数据,而是进行一种"惰性的运算",即创建的时候,我们创建的只是一个生成器的对象,里面记录的是方法,而没有生成数据,可以使用特殊的方法,进行随用随取,并且生成器只能遍历一遍
      创建生成器的方法有两种,
      一种是:a = (生成式) 如:test = (a for a in range(10))
在这里插入图片描述
代码解读:
      等号右边表示生成一个生成器,等号表示将右边的生成器赋给等号左边的变量test

      另一种是:在函数中使用yield关键字,使用yield的函数将不再是一个不同的函数,而是一个生成器对象

def test():
    for i in range(3):
        yield i

print(test())

输出结果为:

<generator object test at 0x0000009FA89EAE08> #可能会有所不同,因为运行的环境不同,内存值不一样

获取生成器里面的值

      由于生产器的返回的都是一个对象,所以,要想获取里面的值,必须使用特殊的方法next([generator])、generator.__next__()、for循环。以上的三种方法对以上两种创建的生成器都可以使用。
在这里插入图片描述
不过需要注意的是,在使用next()与__next__()方法的时候,当生成器里面的内容被取完的时候,如果还进行调用以上两种方法,则会报错:
在这里插入图片描述
值得介绍的是for循环的方法,for循环的方法,不管里面的内容有多少个,如果不加以限制的话,都会取到最后一个,而停止不取,防止报错。

#!encoding=utf-8
def test():
    for i in range(3):
        yield i

for e in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值