python 入坑路-生成器

列表生存式  ,逼格高

>>> a=[i*2 for i in range(10)]
>>> a
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
>>>
>>> l=[]
>>> for i in range(10):
...     l.append(i*2)
...
>>> l
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

 

一般的列表,数据都是实际存在内存中,数据量大占用内存空间太大。生成器,可以解决这个问题,

生成器:

a、只有在调用时才会生成相应的数据,调用哪次才生成那次的数据。

b、只记住当前的位置,只有 __next()__ 方法

#生成器的定义:

>>> b=(i*2 for i in range(10))
>>> b
<generator object <genexpr> at 0x013885D0>

用列表定义时数据马上就生成,用生成器时数据还么有生成,如果定义很大的数据量时,列表需要一些时间,生成器几乎不需要什么时间,因为生成器只是定义了这么个算法,还没有实际生成数据。

生成器调用的时候,才生成数据,没有调用就还没有数据,生成器只有__next__ ()方法,只能一直往下取出下一个值,不支持像列表 切片,或者直接取出第几个数据。

#生成器只能一次一次循环,取出数据,用__next__()方法
>>> a=(i for i in range(1000))
>>> a[250]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'generator' object is not subscriptable

>>> a.__next__()
0
>>>

#列表可以直接取出想要的第几个值
>>> la=[i for i in range(1000) ]
>>> la[250]
250
>>>

 

posted @ 2018-01-02 14:33  东郭仔  阅读(118)  评论(0)    收藏  举报