Re: [心得] 結合Python 與 C(C++) 的優點

看板Python作者 (sbr)時間16年前 (2009/04/14 00:35), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/7 (看更多)
※ 引述《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

04/14 00:56, , 1F
好的 我來寫看看 非常感謝:)
04/14 00:56, 1F
文章代碼(AID): #19usctKK (Python)
討論串 (同標題文章)
文章代碼(AID): #19usctKK (Python)