是否值得缓存Python的范围(开始,停止,步进)?

时间:2020-04-01 07:13:44

标签: python

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

还是不会带来太多好处?

3 个答案:

答案 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,您应该使用xrangexrange(2. )或range(3。)是lazy evaluated,这意味着它在您请求时实际上评估了下一个请求的项目。

因此,不,不需要缓存。实例化您需要的范围, 那里不需要技巧和魔术,它已经在Python中实现。

答案 2 :(得分:0)

它不会受益。如果您想增强循环活动,请参考以下内容的比较:https://dev.to/duomly/loops-in-python-comparison-and-performance-4f2m

您可以对如何改进有所了解。