Cla*_*ell 4 python iteration performance
想知道一次迭代与多次迭代对性能的影响.我在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
Run Code Online (Sandbox Code Playgroud)
现在,除了具有可读性的问题,严格来说,在性能方面,one_pass优于multi_pass是否真的有优势?假设大部分工作都发生在转换函数本身中,那么multi_pass中的每次迭代不会只占用大约1/3的时间吗?
如果元素my_list很大,但适合CPU缓存,则第一个版本可能是有益的.另一方面,如果转换的(字节)代码很大,则缓存操作可能比缓存数据更好.
两个版本都可能比更易读的方式更慢:
def simple(my_list):
return [third_transformation(second_transformation(first_transformation(e)))
for e in my_list]
Run Code Online (Sandbox Code Playgroud)
定时它产生:
one_pass: 0.839533090591
multi_pass: 0.840938806534
simple: 0.569097995758
Run Code Online (Sandbox Code Playgroud)