作者sbrhsieh (sbr)
看板Python
标题Re: [心得] 结合Python 与 C(C++) 的优点
时间Tue Apr 14 00:35:00 2009
※ 引述《KSJ (阿真)》之铭言:
: 里面有二个函式 目的一样 但一个用C++ 一个用Python:
: def usePython(i):
: from time import time
: start=time()
: for j in range(100000000):
: i+=1
: end=time()
: return end-start
: def useC(i):
: from time import time
: start=time()
: import spam #这是spam.pyd 动态函式库(不知道有没有讲错)
: i=spam.useC(i) #这是spam.pyd里 定义的函式
: end=time()
: return end-start
: 同样是在Python Shell底下测试(因为Python比较易用(对我来说))
: 得到的时间比约为 至少 500倍 (快50秒 : 不到0.1秒)
: 所以当程式计算量大的时候 计算部份交给C算是不错的选择
我不知道你 C function 是如何实作出你形容的功能,我想应该只是一个简单的 for
loop 利用 counter 来计数,每个 iteration increment 一个 int 变数 by 1。
如果是这样的话,这个比较其实是不太对等。
在Python 3.0 以前,range 不是产生 iterator,range(100000000) 这个
expression 所作的事是配置至少 100000000 个 4 bytes(for 100000000 个 int
object),并且分别填入 0 ~ 100000000-1,并且配置 4 * 100000000bytes(for
list object本身),这跟 C function 做的事差太多了。
可否麻烦你试着把 usePython 改成:
def usePython(i):
from time import time
start = time()
for j in xrange(100000000):
i += 1
return time()-start, i
或:
def usePython(i):
from time import time
start = time()
j = 0
while j < 100000000:
i += 1
j += 1
return time()-start, i
再比较一下跟 C implementation 的差异约是多少。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.173.128.6
1F:推 KSJ:好的 我来写看看 非常感谢:) 04/14 00:56