python3 中列表推导式和生成器的优缺点
- 列表推导式将所有结果一次性加载到内存
生成器不会将所有的值一次性加载到内存中,延迟计算,一次返回一个结果。yield 是生成器的关键,调用生成器函数,不会立马执行该函数里面的代码, 而是会返回一个生成器<generator object...>
#列表生成器
a = [i for i in range(10)]
print(a)
>>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#生成器
generator = (i for i in range(1, 5))
print(generator)
>>><generator object <genexpr> at 0x0000000003B2BCA8>
def func():
for i in range(10):
yield i
print(func())
>>><generator object func at 0x0000000003B0BCA8>
for i in func():
print(i)
>>>1
2
3
4
5
6
7
8
9
- 列表推导式可以遍历多次,生成器只能遍历一次
a = [i for i in range(10)]
print(a)
print(a)
>>>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
generator = (i for i in range(1, 5))
for i in generator:
print(i)
for i in generator: #这部分不会运行
print('done')
print(i)
>>>1
2
3
4
- 小数据时使用列表推导式计算速度快,大数据时使用生成器,不容易爆内存,代码容易维护。
----------------------------------------END---------------------------------
网友评论