Python高階程式設計 編寫擴充套件

2021-10-02 12:17:41 字數 2511 閱讀 7026

python擴充套件三種不同的實現方式:

寫過jni的人很容易理解,純c擴充套件就是利用python/c api來擴充套件python應用。c/api的詳細使用,請參見:  

例子:

"""setup.py檔案:用來告訴直譯器我們的擴充套件是如何編譯的

擴充套件的構建過程可以通過python的setup.py構建命令初始化,並且它會在程式包安裝時自動執行

"""from setuptools import setup, extension

setup(

name='fibonacci',

ext_modules=[

extension('fibonacci', ['fibonacci.c']),

])

"""fibonacci.c檔案"""

#python.h把整個python/c api以及編寫擴充套件需要引入的一切包含進來

#include long long fibonacci(unsigned int n) else

}static pyobject* fibonacci_py(pyobject* self, pyobject* args)

return result;

}static char fibonacci_docs =

"fibonacci(n): return nth fibonacci sequence number "

"computed recursively\n";

static pymethoddef fibonacci_module_methods = ,

};static struct pymoduledef fibonacci_module_definition = ;

pymodinit_func pyinit_fibonacci(void)

cython既是乙個優化的靜態編譯器,也是乙個python的超集程式語言的名稱。作為編譯器,它可以使用python/c api執行源到源的編譯,把python**及其cython方言編譯為python c擴充套件。它允許你結合python和c的威力,而不需要手動處理python/c api。

setup.py指令碼檔案

from setuptools import setup

from cython.build import cythonize

setup(

name='fibonacci',

ext_modules=cythonize(['fibonacci.pyx'])

)

cython原始檔:fibonacci.pyx

"""cython module that provides fibonacci sequence function"""

cdef long long fibonacci_cc(unsigned int n):

if n < 2:

return n

else:

return fibonacci_cc(n - 1) + fibonacci_cc(n - 2)

def fibonacci(unsigned int n):

""" return nth fibonacci sequence number computed recursively

"""return fibonacci_cc(n)

使用以下命令啟用可選的cython依賴與編譯器:

$ use_cython=1 pip install .[with-cython]

"""python module that provides fibonacci sequence function"""

def fibonacci(n):

""" return nth fibonacci sequence number computed recursively

"""if n < 2:

return 1

else:

return fibonacci(n - 1) + fibonacci(n - 2)

from setuptools import setup

from cython.build import cythonize

setup(

name='fibonacci',

ext_modules=cythonize(['fibonacci.py'])

)

相比於將cython作為編譯器,唯一真正改變是的fibonacci函式的簽名。

pyrex 是一種專門設計用來編寫 python 擴充套件模組的語言。根據 pyrex web 站點的介紹,「它被設計用來在友好易用的高階 python 世界和凌亂的低階 c 世界之間搭建乙個橋梁。」雖然幾乎所有的 python **都可以作為有效的 pyrex **使用,但是您可以在 pyrex **中新增可選的靜態型別宣告,從而使得這些宣告過的物件以 c 語言的速度執行。

python程式設計高階

1 開閉原則 遵循開發封閉原則,雖然在這個原則是用的物件導向開發,但是也適用於函式式程式設計,簡單來說,它規定已經實現的功能 不允許被修改,但可以被擴充套件,即 封閉 已實現的功能 塊 開放 對擴充套件開發 2 可使用裝飾器實現開閉原則 裝飾器是不對原函式內部 進行修改的前提下,在外部增加一些功能,...

python高階程式設計

包和模組的概念及is和 的區別1.包 包含多個python檔案 模組的資料夾,並且資料夾中有乙個名稱為init.py的特殊宣告檔案,那麼這個資料夾就是乙個包 模組包 可以將大量功能相關的python模組包含起來統一管理,同樣也可以被其他模組通過import關鍵字引入重複使用封裝的模組和 2.模組 p...

Python高階程式設計

list comprehension 1.列表推導 i for i in range 10 if i 2 0 0,2,4,6,8 i也可以是乙個函式,該風格比c語言思想的 風格效率高 2.enumerate 取到了序列中的序列號好內容 forindex,item inenumerate sequen...