Cython

維基百科,自由的百科全書
跳至導覽 跳至搜尋
Cython
File:Cython logo.svg
實作者Robert Bradshaw, Stefan Behnel, et al.
釋出時間2007年7月28日,​18年前​(2007-07-28[1]
目前版本
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    實作語言Python
    作業系統WindowsMacOSLinux
    特許條款Apache特許條款2.0
    副檔名.pyx, .pxd, .pxi [2]
    網站{{URL|example.com|可选的显示文本}}Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    受影響於
    C語言PythonPyrex英語Pyrex语言[3]

    Cython/ˈsaɪθɒn/),是將Python結合部分C語法的程式語言,與Python的主要差別在於語法中加入了靜態類型,用戶可以維持大部分的Python語法,而不需要大幅度調整主要的程式邏輯與演算法。但由於會直接編譯為二進制程式,所以效能較Python會有很大提升[4][5]

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

    Cython檔案的擴展名為.pyx。在最基本的情況下,Cython程式碼看起來與Python程式碼完全一樣。 然而,雖然標準Python是動態類型的,但在Cython中,可以選擇提供類型,從而提高效能,並允許在可能的情況下將循環轉換為C循環[6]

    語法[編輯]

    定義變量[編輯]

    可以使用關鍵字cdef定義變量[7]

    cdef int a = 1
    

    定義函數[編輯]

    可以使用關鍵字def、cdef、或cpdef定義函數。

    cdef int f(int x):
        return x + 1
    

    使用關鍵字cdef定義的函數,會被Cython編譯成C語言,所以速度較快,但無法被Python使用;只有使用def或cpdef定義的函數可以在Python中使用[8]

    定義結構[編輯]

    cdef struct x:
      int y
      float z
    

    使用 C 標頭檔[編輯]

    cdef extern from "stdio.h":
        int puts(const char*)
    

    [9]

    如果要使用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)
    

    [10]

    或:

    #distutils: language = c++
    from libcpp.vector cimport vector
    

    編譯[編輯]

    cythonize -3 -i example.pyx
    

    參考資料[編輯]

    1. ^ 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). 
    2. ^ Cython支援的檔案副檔名格式 – 檔案詞典. [2020-11-23]. (原始內容存檔於2022-03-31) (en-US). 
    3. ^ Related work — Cython 3.0.0a9 documentation. cython.readthedocs.io. [2021-09-03]. (原始內容存檔於2021-11-18). 
    4. ^ Cython - an overview — Cython 0.19.1 documentation. Docs.cython.org. [2013-07-21]. (原始內容存檔於2013-08-11). 
    5. ^ Smith, Kurt. Cython: A Guide for Python Programmers. O'Reilly Media. 2015 [2019-05-07]. ISBN 978-1-4919-0155-7. (原始內容存檔於2019-05-08). 
    6. ^ Mark Lutz. Learning Python, 5th Edition. [2021-09-17]. (原始內容存檔於2021-10-08). 
    7. ^ Language Basics — Cython 3.0.0a9 documentation. cython.readthedocs.io. [2021-09-08]. (原始內容存檔於2022-02-15). 
    8. ^ Language Basics — Cython 3.0.0a9 documentation. cython.readthedocs.io. [2021-09-08]. (原始內容存檔於2022-02-15). 
    9. ^ Interfacing with External C Code — Cython 3.0.0a9 documentation. cython.readthedocs.io. [2021-09-09]. (原始內容存檔於2022-04-25). 
    10. ^ Using C++ in Cython — Cython 3.0.0a9 documentation. cython.readthedocs.io. [2021-09-09]. (原始內容存檔於2022-02-13). 

    參見[編輯]

    外部連結[編輯]

    • Module:Official_website第90行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    • GitHub上的Cython頁面