從去年開始就一直有在參加Taipei.py
不過一直以來聽的都是在場Programmer 專業的分享 當然收獲有是有
不過仍然感到非常的硬 原因在於他們分享的東西沒有玩過 當然容易聽不懂
自從上次第一次 Pandas手把手教學 再接這次的Cython手把手教學
真的越來越感覺Taipei.py 對初學的人相常友善~ :)
我也感覺自己滿幸運的 當自己有想學的東西都會剛好有人要分享、教學(樂)
不管是上次的Pandas 或 這次的Cython 居然可以從頭到尾聽得懂~ 跟著做XD
對我來說也是相當大的鼓舞 以後提及Python加速 或者 資料分析應該就不會太陌生了~
什麼是Cython!? 你可以把它想成是 Cython = C + Python
或者是乾脆把Cython想成是一個新的語言也行
為什麼要這麼做? 原因沒有別的~ 腳本語言最大的缺點就是速度會比靜態語言慢上許多
尤其是像Python越來越被用在科學運算做處理 當然對於速度上的需求就越大
之前的Taipei.py就有人說 我可以用Python寫出和C一樣快的程式 這種酷酷的發言XD
他就介紹了Cython,今天終於有機會聽到Mosky帶著大家體驗這個驚人的套件~
一般Python在import 套件的時候都的.py檔
但其實只要符合Python所訂的規則,其它檔案也都可以import 給Python去做使用
此外Cython會比Python快的原因之一也是經由轉成.c檔再做編譯
當然比起Python的直譯器快 Cython編譯完的.so (share object)
就可以給Python import使用了
Cython在寫的使用其實仍保持著像Python的彈性 也因此可以與Python的檔案做相容
除此之外像是一些變數或function的宣告就有分像 CDEF CPDEF 及Python原本的DEF
cdef int i,j,k
cdef float f, g[42], *h
後面基本上就和你一般寫c宣告的方式一樣XD 當然像enum struct 也都可以這麼做
Cython的檔案為 .pyx 所以一般是寫在裡頭
那這三種的差別到底在哪? 為什麼有這些東西出現?
CDEF和原本的DEF相比 CDEF是僅用來給C去做轉換編譯的
此外Python 不是用import 而是cimport 去做載入 並且僅能執行
CDEF並不提供給Python像DEF做function的呼叫
繼承至C所以在用CDEF的時面 還必須要創一個.pxd 檔做介面的宣告
這點稍為麻煩了一些XD
而CPDEF 和 CDEF的差別 可以想成是CDF包了一層Python
這樣就可以讓Python去做function的呼叫了,為此所付出的代價就是速度較慢
這邊附上了Mosky附上了比較表 對 這堂Cython有興趣的可以到 mosky.tw 找投影片~
速度是越上面速度就越快,反正則越慢
我們可以發現DEF在最下面是速度最慢的一個
再來就是CPDEF犧牲了一點速度換來Python呼叫的便利性
排第二的就是我們自己寫的CDEF 相對的就不方便許多
最快的理所當然就是直接用Cython去取用C原的函式庫 使用方式一樣是用cimport
所以我們可以發現Cython加速的方式就是去犧牲Python的韌性來換取速度
我記得像是多了形態和陣列大小的宣告就能夠大幅提升原本的效能
而我們也可以透過Cython找到Python的便利性與速度的平衡
不但可以讓原始碼非常簡潔,同樣的也有一定的效能,這是多神奇的一件事啊!
做了非常扎實的綀習 超棒!! Cython給人的印象深刻!!
在這堂也發現了檔案的命名管理真的超級重要 .pyx .pxd .py 三個互相做取用
如果隨便命名 光是該import哪些就相當惱人了吧XD
期待下一次的Taipei.py 不過在那之前的五月中會有更大的聚會
5/17 PyCon2014 Apac 期待會有更多收獲與心得~