【发布时间】:2012-12-01 03:13:55
【问题描述】:
我有一个程序,每行读取 3 个字符串 50000。然后它会做其他事情。读取文件并转换为整数的部分占用了总运行时间的 80%。
我的代码 sn-p 如下:
import time
file = open ('E:/temp/edges_big.txt').readlines()
start_time = time.time()
for line in file[1:]:
label1, label2, edge = line.strip().split()
# label1 = int(label1); label2 = int(label2); edge = float(edge)
# Rest of the loop deleted
print ('processing file took ', time.time() - start_time, "seconds")
上述过程大约需要 0.84 秒。现在,当我取消注释该行时
label1 = int(label1);label2 = int(label2);edge = float(edge)
运行时间增加到大约 3.42 秒。
输入文件的格式为:str1 str2 str3 每行
int() 和 float() 的函数有那么慢吗?我该如何优化呢?
【问题讨论】:
-
我没有看到导致运行时差异如此大的两行之间的差异;你能澄清一下吗?
-
这很奇怪。在我的机器上,两个
int()调用和一个float()调用总共需要大约1.7us。这个时间 50000 是 85ms。这使您的速度比我的慢 30 倍。这听起来不对。 -
为了呼应蒂姆所说的,你能清楚地说明你正在比较的是哪两个版本吗?现在您在代码中进行了转换,但将
append()注释掉了。然后,您建议当您添加转换时,时间会发生变化。要么我完全误解了这一点,要么显然有一些错别字。 -
如果我是你,我会看看这三个转换中的每一个都需要多少时间。另外,我会想出一个小型的独立可运行测试用例来展示速度缓慢并且我们可以进行试验。
-
什么 Python 3.x 版本?这是我从快速试用中看到的:2.7、3.2 和 3.3 在没有转换的情况下都运行 0.033。通过转换,我得到:2.7 - 0.125s; 3.1 - 0.162s; 3.2 - 0.155 秒,3.3 - 0.10 秒。对于 3.1 和 3.2,这是 5 和 0.84 x 5 ~ 4s 的减速。
标签: python performance python-3.x