在Python程序中,它在固定的for
上多次运行range
循环,例如,
while some_clause:
for i in range(0, 1000)
pass
...
缓存range
有意义吗?
r = range(0, 1000)
while some_clause:
for i in r
pass
...
还是不会带来太多好处?
答案 0 :(得分:8)
不会,range
调用几乎没有任何作用。只有iter
ing部分(不是可选部分)才需要付费。
有趣的是,在下面的示例中,由于某种原因,缓存使速度变慢。
我的基准测试
>>> timeit.timeit("""
for i in range(10000):
pass""",number=10000)
1.7728144999991855
>>> timeit.timeit("""
for i in r:
pass""","r=range(10000)",number=10000)
1.80037959999936
如Python的Zen所述,对其进行缓存会破坏可读性:
Readability counts.
和
Explicit is better than implicit.
Simple is better than complex.
答案 1 :(得分:1)
如果您使用的是Python 2.*
,则range
将返回list
,您应该使用xrange
。
xrange
(2. )或range
(3。)是lazy evaluated
,这意味着它在您请求时实际上评估了下一个请求的项目。
因此,不,不需要缓存。实例化您需要的范围, 那里不需要技巧和魔术,它已经在Python中实现。
答案 2 :(得分:0)
它不会受益。如果您想增强循环活动,请参考以下内容的比较:https://dev.to/duomly/loops-in-python-comparison-and-performance-4f2m
您可以对如何改进有所了解。