python3学习笔记每日一记-生成器

python3学习笔记每日一记-生成器,第1张

在Python中,这种一边循环一边计算的机制,称为生成器:generator。

列表式生成的list一次生成完成,如果列表有大量的元素会占用大量的内存空间,可以把生成列表的"[]"改为"()",就创建了一个generator。

列表生成式:[x * x for x in range(10)]

创建generator:g  = (x * x for x in range(10))

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
 at 0x1022ef630>

L是一个listg是一个generator 

可以使用next()函数从生成器中一个一个取值

>>> next(g)
0
>>> next(g)
1
>>> next(g)
4
>>> next(g)
9
>>> next(g)
16
>>> next(g)
25
>>> next(g)
36
>>> next(g)
49
>>> next(g)
64
>>> next(g)
81
>>> next(g)
Traceback (most recent call last):
  File "", line 1, in 
StopIteration

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

使用next()函数取值不友好,超出范围还会抛出Stoplteration的错误,所以一般会使用for循环取值,for循环不回抛出该异常

>>> g = (x * x for x in range(10))
>>> for n in g:
...     print(n)
... 
0
1
4
9
16
25
36
49
64
81

复杂的生成器使用列表生成式无法实现的时候,可以使用函数来实现,函数中定义关键字yield ,该关键字表示该函数为generator 函数。

yield 关键字的generator 函数待补充

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/714416.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存