Memanggil C/C daripada Python
Apabila bekerja dengan sistem Windows, mengikat Python dengan pustaka C/C dengan cekap adalah penting. Antara pilihan yang tersedia, modul ctypes menonjol sebagai pilihan yang menarik.
Menggunakan Ctypes untuk Binding
Ctypes ialah bahagian penting pustaka standard Python. Kestabilan yang wujud dan ketersediaan yang luas menjadikannya pilihan yang berfaedah berbanding dengan alternatif lain. Selain itu, pengikatan ctypes disesuaikan untuk berfungsi dengan lancar dengan setiap versi Python yang menyokong ctypes, bukan sahaja yang digunakan semasa penyusunan.
Membina Python Binding dengan Ctypes
Pertimbangkan kelas C ringkas bernama Foo yang ditakrifkan dalam foo.cpp:
#include <iostream> class Foo{ public: void bar(){ std::cout << "Hello" << std::endl; } };
Untuk memudahkan komunikasi dengan Python melalui ctypes, fungsinya mesti diisytiharkan sebagai "C" luaran:
extern "C" { Foo* Foo_new(){ return new Foo(); } void Foo_bar(Foo* foo){ foo->bar(); } }
Seterusnya, susun kod ini ke dalam perpustakaan kongsi :
g++ -c -fPIC foo.cpp -o foo.o g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o
Akhir sekali, buat pembungkus Python (cth., fooWrapper.py):
from ctypes import cdll lib = cdll.LoadLibrary('./libfoo.so') class Foo(object): def __init__(self): self.obj = lib.Foo_new() def bar(self): lib.Foo_bar(self.obj)
Dengan pembungkus ini, anda boleh berinteraksi dengan kelas C:
f = Foo() f.bar() # Outputs "Hello" to the screen
Faedah Ctypes
Ctypes memudahkan proses mengikat kod C/C kepada Python, menyediakan penyelesaian yang stabil dan boleh digunakan secara meluas pada sistem Windows. Ia menawarkan pendekatan yang mantap dan serasi silang untuk antara muka dengan perpustakaan asli daripada Python.
Atas ialah kandungan terperinci Bagaimanakah Ctypes Boleh Menjembatani Python dan C/C dengan Cekap pada Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!