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

Ant*_*nko 6 python

在一个运行for固定range多次循环的 Python 程序中,例如,

while some_clause:
    for i in range(0, 1000)
        pass
    ...
Run Code Online (Sandbox Code Playgroud)

缓存是否有意义range

r = range(0, 1000)
while some_clause:
    for i in r
        pass
    ...
Run Code Online (Sandbox Code Playgroud)

或者它不会增加多少好处?

xkc*_*rry 8

它不会,一个range电话几乎没有任何作用。只有itering 部分不是可选的,有成本。

有趣的是,在下面的示例中,由于某种原因,缓存会使其变慢。

我的基准:

>>> 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
Run Code Online (Sandbox Code Playgroud)

缓存它会破坏可读性,正如 Python 之禅所说:

Readability counts.
Run Code Online (Sandbox Code Playgroud)

Explicit is better than implicit.
Simple is better than complex.
Run Code Online (Sandbox Code Playgroud)