在寻找提高Python脚本效率的机会的同时,我偶然发现循环执行所需的总时间与循环中指令所需的累积时间之间存在相当混淆(对我而言)的差异。执行。
这里是相关的代码块(它涉及读取csv中的行,然后对每行的元素运行一些计算):
time_to_execute_lines = 0
start_reading = time.time()
for line in file:
s = time.time()
if not line[0] in foo:
continue
if not is_valid_row(line):
continue
if line[1] in my_dict[line[0]]:
update_item(line,bar)
else:
add_item(line,bar)
time_to_execute_lines = time_to_execute_lines + time.time() - s
stop_reading = time.time()
print "Time to complete for loop: " + str(stop_reading - start_reading)
print "Time to execute lines of loop: " + str(time_to_execute_lines)
一些示例输出,我观察了几个不同的文件:
Time to complete for loop: 7.80099987984
Time to execute lines of loop: 0.420000076294
这不仅仅是我通过运行这些计算来增加时间。如果我在循环中删除持续时间计算,我会得到一点时间回来,但不足以证明这种差异:
start_reading = time.time()
for line in file:
s = time.time()
if not line[0] in foo:
continue
if not is_valid_row(line):
continue
if line[1] in my_dict[line[0]]:
update_item(line,bar)
else:
add_item(line,bar)
time_to_execute_lines = time_to_execute_lines + time.time() - s
stop_reading = time.time()
print "Time to complete for loop: " + str(stop_reading - start_reading)
输出:
Time to complete for loop: 7.24400019646
有关导致这种差异的原因的任何想法?在循环中对指令进行计时的这种方法中是否存在系统测量误差?我很乐意回来七秒钟!
答案 0 :(得分:1)
总时间包括读取文件中的行的时间,但单独添加的时间不是(即generator()
,而所有这些时间都没有在for line in file:
中计时。