生成器是惰性求值的。您需要处理生成器才能评估您的功能。可以使用collections.deque
一个生成器:
import collections
generator = (myClass().Function(thing) for thing in biggerThing)
collections.deque(generator , maxlen=0)
并考虑使用@staticmethod
or @classmethod
,或更改为
myfunc = myClass().Function
generator = (myfunc(thing) for thing in biggerThing)
collections.deque(generator , maxlen=0)
减少myClass
每个thing
处理的新创建实例。
更新,性能
collections
对比iteration
定义 l():
对于范围内的 x(100):
y = x**2
产量 y
定义消耗(它):
因为我在里面:
经过
>>> timeit.timeit('from __main__ import l, consume; consume(l())', number=10000)
0.4535369873046875
>>> timeit.timeit('from __main__ import l, collections; collections.deque(l(), 0)', number=10000)
0.24533605575561523
- 实例 vs 类 vs 静态方法
类测试(对象):
@静态方法
def stat_pow(x):
返回 x**2
@classmethod
def class_pow(cls, x):
返回 x**2
定义 inst_pow(自我,x):
返回 x**2
def static_gen():
对于范围内的 x(100):
产量 Test.stat_pow(x)
定义类_gen():
对于范围内的 x(100):
产量 Test.class_pow(x)
定义 inst_gen():
对于范围内的 x(100):
产量测试().inst_pow(x)
>>> timeit.timeit('from __main__ import static_gen as f, collections; collections.deque(f(), 0)', number=10000)
0.5983021259307861
>>> timeit.timeit('from __main__ import class_gen as f, collections; collections.deque(f(), 0)', number=10000)
0.6772890090942383
>>> timeit.timeit('from __main__ import inst_gen as f, collections; collections.deque(f(), 0)', number=10000)
0.8273470401763916