Cython
與Python相容的程式語言
此條目可參照英語維基百科相應條目來擴充。 (2019年4月3日) |
Cython是將Python結合部分C語法的程式語言,與Python的主要差別在於語法中加入了靜態類型,使用者可以維持大部分的Python語法,而不需要大幅度調整主要的程式邏輯與演算法。但由於會直接編譯為二進制程序,所以性能較Python會有很大提升[5][6]。
實作者 | Robert Bradshaw, Stefan Behnel, et al. |
---|---|
面市時間 | 2007年7月28日[1] |
當前版本 |
|
實作語言 | Python |
操作系統 | Windows、MacOS、Linux |
許可證 | Apache許可證2.0 |
文件擴展名 | .pyx, .pxd, .pxi [3] |
網站 | cython |
啟發語言 | |
C語言、Python、Pyrex[4] |
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
使用 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
參考資料
編輯- ^ Behnel, Stefan. The Cython Compiler for C-Extensions in Python. EuroPython (28 July 2007: official Cython launch). Vilnius/Lietuva. 2008 [2020-09-12]. (原始內容存檔於2016-10-22).
- ^ Release 3.0.11-1. 2024年8月5日 [2024年8月22日].
- ^ Cython支援的檔案副檔名格式 – 檔案詞典. [2020-11-23]. (原始內容存檔於2022-03-31) (美國英語).
- ^ Related work — Cython 3.0.0a9 documentation. cython.readthedocs.io. [2021-09-03]. (原始內容存檔於2021-11-18).
- ^ Cython - an overview — Cython 0.19.1 documentation. Docs.cython.org. [2013-07-21]. (原始內容存檔於2013-08-11).
- ^ Smith, Kurt. Cython: A Guide for Python Programmers. O'Reilly Media. 2015 [2019-05-07]. ISBN 978-1-4919-0155-7. (原始內容存檔於2019-05-08).
- ^ Mark Lutz. Learning Python, 5th Edition. [2021-09-17]. (原始內容存檔於2021-10-08).
- ^ Language Basics — Cython 3.0.0a9 documentation. cython.readthedocs.io. [2021-09-08]. (原始內容存檔於2022-02-15).
- ^ Language Basics — Cython 3.0.0a9 documentation. cython.readthedocs.io. [2021-09-08]. (原始內容存檔於2022-02-15).
- ^ Interfacing with External C Code — Cython 3.0.0a9 documentation. cython.readthedocs.io. [2021-09-09]. (原始內容存檔於2022-04-25).
- ^ Using C++ in Cython — Cython 3.0.0a9 documentation. cython.readthedocs.io. [2021-09-09]. (原始內容存檔於2022-02-13).