Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah ctypes Boleh Menjembatani Perpustakaan Python dan C/C dengan lancar?
Memanggil C/C daripada Python dengan ctypes
Apabila ingin mewujudkan jambatan antara Python dan C/C , modul ctypes muncul sebagai pilihan yang diutamakan. Penyepaduan lancarnya dengan perpustakaan standard Python memastikan kestabilan dan kebolehcapaian yang meluas. Tidak seperti swig, yang kadangkala boleh menghadapi masalah, ctypes menyediakan jambatan yang boleh dipercayai antara dua bahasa.
ctypes cemerlang dalam keupayaannya untuk mengendalikan kebergantungan masa kompilasi pada Python, membolehkan pengikatan anda berfungsi dengan sempurna pada mana-mana pemasangan Python yang menyokong ctypes, tanpa mengira versi yang digunakan untuk penyusunan.
Untuk menggambarkan penggunaannya, pertimbangkan kelas C berikut bernama Foo:
#include <iostream> class Foo { public: void bar() { std::cout << "Hello" << std::endl; } };
Memandangkan ctypes hanya boleh berinteraksi dengan fungsi C, anda mesti mengisytiharkan fungsi ini sebagai "C" luaran:
extern "C" { Foo* Foo_new() { return new Foo(); } void Foo_bar(Foo* foo) { foo->bar(); } }
Kompilkan 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 untuk merapatkan sambungan:
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 persediaan ini, anda boleh menggunakan perpustakaan C daripada Python dengan mudah:
f = Foo() f.bar() # Prints "Hello" on the screen
ctypes menyediakan penyelesaian yang mudah dan cekap untuk membina pengikatan Python pada perpustakaan C/C , memudahkan kesalingoperasian yang lancar antara bahasa pengaturcaraan ini.
Atas ialah kandungan terperinci Bagaimanakah ctypes Boleh Menjembatani Perpustakaan Python dan C/C dengan lancar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!