为什么会这样?
但赛顿成了救世主
下面的纯python版本借用了Glenn Maynard的答案(没有打印)
基于此,cython版本非常简单,对于一个新的python程序员来说已经足够简单了:
def main():
cdef int i = 0
cdef int a = 0
while i < 6553500:
i += 1
if i != 6553500:
a = i
else:
pass # print "0"
return a
if __name__ == "__main__":
print main()
在我的电脑上,python版本需要2.5s,cython版本需要5.5ms:
In [1]: import pyximport
In [2]: pyximport.install()
In [3]: import spam # pure python version
In [4]: timeit spam.main()
1 loops, best of 3: 2.41 s per loop
In [5]: import eggs # cython version
In [6]: timeit eggs.main()
100 loops, best of 3: 5.51 ms per loop
更新:正如Glenn Maynard在评论中指出的,而i
我测试xrange的实现。
spam.py和Glenn Maynard的verison是一样的。py的代码是:
def main():
for i in xrange(6553500):
pass
a = i
return a
if __name__ == "__main__":
print main()
~/code/note$ time python2.7 spam.py # Glenn Maynard's while version
6553499
real 0m2.128s
user 0m2.080s
sys 0m0.044s
:~/code/note$ time python2.7 foo.py # xrange version, as Glenn Maynard point out in comment
6553499
real 0m0.618s
user 0m0.604s