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 >>>

浙公网安备 33010602011771号