相比
在Windows上的C++中.
我在一个入门的comp-sci课程(经过多年的网络编程之后),并且对我用单行程获得的速度感到好奇,如果有的话.
for line in lines:
numbers.append(eval(line.strip().split()[0]))
Run Code Online (Sandbox Code Playgroud)
所以我用痛苦的显式作业写了同样的东西,然后互相对抗.
for line in lines:
a = line.split()
b = a[0]
c = b.strip()
d = eval(c)
numbers.append(d)
Run Code Online (Sandbox Code Playgroud)
第二个运行速度快 30ms (在我的FreeBSD shell帐户上;参见编辑#2),输入文件为100K行!当然这是在3秒的总运行时间,因此百分比并不大...但我真的很惊讶看到所有那些明确命名的任务以某种方式帮助.
有一个最近的线程上的功能,而不是内联代码的性能,但这似乎更基本.是什么赋予了?我是否应该亲切地编写冗长冗长的代码并告诉我的嘲笑同事这是出于性能原因?(值得庆幸的是,列表理解版本运行速度提高了约10ms,因此我所珍视的紧凑性并不完全在窗外.)
编辑:感谢您对我的草率扩展代码的提示.你是对的,第二个应该是真的:
for line in lines:
a = line.strip()
b = a.split()
c = b[0]
d = eval(c)
numbers.append(d)
Run Code Online (Sandbox Code Playgroud)
然而,即使我已经解决了这个问题,我的时间分别是2.714s,2.652s和2.624s,对于单线程,完全爆炸形式和列表理解(未图示).所以我的问题就是!
编辑#2:有趣的是,即使对于一群知识渊博的人来说答案似乎并不明显,这让我对这个问题感觉好一些!在这种情况和类似的情况下,我现在可能会自己玩一下,看看会发生什么.如果你愿意,一定要继续修补线程,但是我要宣布我收到的答案是"嗯,这很有趣;一定是深刻的东西." 特别是因为steveha指出,机器之间的行为并不一致 - 在我的Debian和Windows安装上,另一个方向略有不同.感谢所有贡献的人!