首页 > 解决方案 > Python 每个循环创建/分配一个值到一个变量是否比在循环外创建/分配一个变量需要更多的内存/时间?

问题描述

例如:

for i in range(5000):
    a = "some words"
    # Other things

对比

a = "some words"
for i in range(5000):
    # Other things

我想第二个会更好,但到底好多少?在循环之外有一些代码可能更有效,但是当变量在使用之前立即分配时,调试和阅读也更容易。

标签: pythonpython-3.x

解决方案


直观地说,在 vanilla cPython 中,在没有即时编译器可能会将该分配提升到循环之外的情况下,我们希望 option2 更快。

有关“编译器提升”的更多信息,请参见此处。

你可以自己试试。

import timeit

foo = '''
for i in range(5_000):
    a = "some words"
'''

bar = '''
a = "some words"
for i in range(5_000):
    pass
'''

print(timeit.timeit(foo, number=10_000))
print(timeit.timeit(bar, number=10_000))

给我:

1.3565055000000001
0.9187005000000001

请注意,尽管与您的应用程序所做的任何其他事情相比,这种速度差异可能毫无意义,我建议您使用您认为最容易理解和维护的任何内容。


推荐阅读