想知道进行一次迭代与多次迭代对性能的影响。我在 Python 中工作——我不确定这是否会影响答案。
考虑尝试对列表中的每个项目执行一系列数据转换。
def one_pass(my_list):
for i in xrange(0, len(my_list)):
my_list[i] = first_transformation(my_list[i])
my_list[i] = second_transformation(my_list[i])
my_list[i] = third_transformation(my_list[i])
return my_list
def multi_pass(my_list):
range_end = len(my_list)
for i in xrange(0, range_end):
my_list[i] = first_transformation(my_list[i])
for i in xrange(0, range_end):
my_list[i] = second_transformation(my_list[i])
for i in xrange(0, range_end):
my_list[i] = third_transformation(my_list[i])
return my_list
现在,除了可读性问题,严格来说,在性能方面,one_pass 相对于 multi_pass 是否有真正的优势?假设大部分工作发生在转换函数本身,那么 multi_pass 中的每次迭代不会只花费大约 1/3 的时间吗?
最佳答案
不同之处在于您正在阅读的值和代码在 CPU's cache 中出现的频率。 .
如果 my_list
的元素很大,但适合 CPU 缓存,第一个版本可能会有用。另一方面,如果转换的(字节)代码很大,缓存操作可能比缓存数据更好。
这两个版本都可能比更具可读性的方式慢:
def simple(my_list):
return [third_transformation(second_transformation(first_transformation(e)))
for e in my_list]
Timing it产量:
one_pass: 0.839533090591
multi_pass: 0.840938806534
simple: 0.569097995758
关于python - 多次迭代的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13407022/