Cython

Cython（），是將Python結合部分C语法的程式語言，與Python的主要差別在於語法中加入了靜態類型，使用者可以維持大部分的Python語法，而不需要大幅度調整主要的程式邏輯與演算法。但由于会直接编译为二进制程序，所以性能较Python会有很大提升。

Cython典型的運用于编写Python扩展模块，以取得較高的執行效能。Cython將原始碼轉譯成C或C++語法後，自動包裝上函式呼叫界面生成.pyd（或.so，因作業系統而異）後綴的二進位檔，即可當成普通的Python函式庫。其性能一般遜於原生的C/C++函式庫，但由於Cython語法的易用性可以縮短開發時間。Cython也可以用於將C/C++程式碼封裝為Python函式庫。

Cython文件的擴展名為.pyx。在最基本的情況下，Cython代码看起來與Python代码完全一樣。 然而，雖然標準Python是動態類型的，但在Cython中，可以選擇提供類型，從而提高性能，並允許在可能的情況下將循環轉換為C循環。

 語法 
 定義變數 
可以使用關鍵字cdef定義變數
cdef int a = 1

 定義函數 
可以使用關鍵字def、cdef、或cpdef定義函數。
cdef int f(int x):
    return x + 1
使用關鍵字cdef定義的函數，會被Cython編譯成C語言，所以速度較快，但無法被Python使用；只有使用def或cpdef定義的函數可以在Python中使用。

 定義結構 
cdef struct x:
  int y
  float z

 使用 C 標頭檔 
cdef extern from "stdio.h":
    int puts(const char*)
如果要使用C標準庫中的函數，也可以這樣寫：
from libc.stdio cimport puts

 使用 C++ 標頭檔 
#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

 參考資料 

 參見 
 PyPy
 Numba

 外部連結 



Category:Python
Category:使用Apache许可证的软件