语言基础之:生成器Generator

本文介绍了Python中的生成器(Generator),它是一个返回迭代器的函数,可以用来节省内存。通过yield关键字,函数在每次调用next()时暂停并保存状态,从而实现斐波拉契数列等算法。同时,文章探讨了yield的解析、如何抓取生成器返回值以及如何在单线程中实现并发运算。
摘要由CSDN通过智能技术生成

在 Python 中,使用了 yield 的函数被称为生成器(generator)。

  • 只有一个I.next()方法
    跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

  • 只记录当前位置:
    在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

  • 调用一个生成器函数,返回的是一个迭代器对象。

1 列表生成式

列表生成式在调用列表之前创建完整的列表,如果列表参数庞大,会占用大量的内存空间。

>>> L = [x*2 for x in range(10)]
>>> L
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
>>> L[3]
6
>>> len(L)
10
>>>

2 生成器

generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

>>> I = (i*2 for i in range(10000))
>>> print(I)
<generator object <genexpr> at 0x0000021DB16747B0>
# 创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。
>>> for value in I:
...     print(value)
0
...
11060
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
KeyboardInterrupt
>>><
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值