Cython是將Python結合部分C語法的程式語言,與Python的主要差別在於語法中加入了靜態類型,用戶可以維持大部分的Python語法,而不需要大幅度調整主要的程式邏輯與演算法。但由於會直接編譯為二進制程式,所以效能較Python會有很大提升[5][6]。
此條目可參照英語維基百科相應條目來擴充。 (2019年4月3日) |
Cython典型的運用於編寫Python擴充模組,以取得較高的執行效能。Cython將原始碼轉譯成C或C++語法後,自動包裝上函數呼叫介面生成.pyd(或.so,因作業系統而異)後綴的二進位檔,即可當成普通的Python函式庫。其效能一般遜於原生的C/C++函式庫,但由於Cython語法的易用性可以縮短開發時間。Cython也可以用於將C/C++程式碼封裝為Python函式庫。
Cython檔案的擴展名為.pyx。在最基本的情況下,Cython代碼看起來與Python代碼完全一樣。 然而,雖然標準Python是動態類型的,但在Cython中,可以選擇提供類型,從而提高效能,並允許在可能的情況下將循環轉換為C循環[7]。
語法
可以使用關鍵字cdef定義變數[8]
cdef int a = 1
可以使用關鍵字def、cdef、或cpdef定義函數。
cdef int f(int x):
return x + 1
使用關鍵字cdef定義的函數,會被Cython編譯成C語言,所以速度較快,但無法被Python使用;只有使用def或cpdef定義的函數可以在Python中使用[9]。
cdef struct x:
int y
float z
cdef extern from "stdio.h":
int puts(const char*)
如果要使用C標準庫中的函數,也可以這樣寫:
from libc.stdio cimport puts
#distutils: language = c++
cdef extern from "<vector>" namespace "std":
cdef cppclass vector[T]:
vector()
void push_back(T&)
T& operator[](int)
T& at(int)
或:
#distutils: language = c++
from libcpp.vector cimport vector
編譯
cythonize -3 -i example.pyx
參考資料
參見
外部連結
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.