2024-04-18 08:52:26 发布
网友
假设我们做了以下事情:(忽略这是否愚蠢或者有更好的方法,这是一个简化的例子)
from itertools import izip def check(someList): for item in someList: yield item[0] for items in izip(check(someHugeList1), check(someHugeList2)): //some logic
既然check是一个生成器,那么使用izip是多余的吗?使用普通拉链也一样好吗?你知道吗
在python3上,zip的行为与Python2的izip相同。在Python2上,izip返回一个生成器,而zip返回一个列表,izip在内存中会更好(不会创建新的列表)。你知道吗
规则的zip()会首先扩展整个生成器。你不会想用一个巨大的或无休止的发电机。你知道吗
zip()
演示:
>>> def gen(): ... print 'generating' ... yield 'a' ... >>> gen() <generator object gen at 0x10747f320> >>> zip(gen(), gen()) generating generating [('a', 'a')]
请注意,直接创建生成器不会打印任何内容;生成器仍处于暂停状态。但是将生成器传递给zip()会立即生成输出,而输出只能通过对生成器进行完全迭代来生成。你知道吗
在python3上,zip的行为与Python2的izip相同。在Python2上,izip返回一个生成器,而zip返回一个列表,izip在内存中会更好(不会创建新的列表)。你知道吗
规则的
zip()
会首先扩展整个生成器。你不会想用一个巨大的或无休止的发电机。你知道吗演示:
请注意,直接创建生成器不会打印任何内容;生成器仍处于暂停状态。但是将生成器传递给
zip()
会立即生成输出,而输出只能通过对生成器进行完全迭代来生成。你知道吗相关问题 更多 >
编程相关推荐