pybind11 ile C++'tan Python Çağırma
pybind11 kullanarak C++ kodunu Python modülü olarak sarmalayın
pybind11 ile C++'tan Python Çağırma, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.
Neden pybind11
pybind11, en az kalıp kodla C++ kodu için Python bağlamaları oluşturan, yalnızca başlıklardan oluşan bir kitaplıktır. SciPy, TensorFlow ve diğer birçok proje tarafından kullanılır.
En Küçük Modül
PYBIND11_MODULE makrosuyla tek bir dosyada bir Python modülü tanımlayın.
#include <pybind11/pybind11.h>
namespace py = pybind11;
int add(int a, int b) { return a + b; }
PYBIND11_MODULE(mymodule, m) {
m.def("add", &add, "Add two integers");
}Modülü Derleme
Bir Python uzantı modülü olarak derleyin — genellikle CMake veya setuptools kullanılır.
# CMake
find_package(pybind11 REQUIRED)
pybind11_add_module(mymodule mymodule.cpp)Python'dan Kullanma
Herhangi bir Python modülü gibi içe aktarın ve kullanın.
# Python
import mymodule
print(mymodule.add(2, 3)) # 5Sınıfları Dışa Açma
Bir C++ sınıfını bağlamak için py::class_ kullanın. Yapıcılar, yöntemler ve özelliklerin tümü Python eşdeğerlerine dönüştürülür.
class Point {
public:
Point(int x, int y) : x_(x), y_(y) {}
int x() const { return x_; }
int y() const { return y_; }
private:
int x_, y_;
};
PYBIND11_MODULE(geom, m) {
py::class_<Point>(m, "Point")
.def(py::init<int, int>())
.def("x", &Point::x)
.def("y", &Point::y);
}Tür Dönüşümleri
pybind11 yaygın türleri otomatik olarak dönüştürür:
std::string↔ Python strstd::vector<T>↔ Python liststd::map↔ Python dict- Sayısal türler ↔ Python int/float
NumPy Birlikte Çalışabilirliği
NumPy dizilerini py::array_t<T> olarak geçirin. Kopyasız işlemler için arabelleğe erişin.
void scale(py::array_t<double> arr, double factor) {
auto buf = arr.mutable_unchecked<1>();
for (size_t i = 0; i < buf.size(); ++i)
buf(i) *= factor;
}Bağlama Olarak Lambda'lar
Bağımsız değişkenleri dönüştürmek veya davranışı sarmalamak istediğinizde bir lambda'yı doğrudan bağlayın.
m.def("show", [](const Point& p) {
return "(" + std::to_string(p.x()) + ", " + std::to_string(p.y()) + ")";
});GIL'i Serbest Bırakma
Uzun C++ hesaplamaları için GIL'i serbest bırakın; böylece diğer Python iş parçacıkları çalışabilir.
m.def("slow", []() {
py::gil_scoped_release release;
// expensive C++ work, no Python access
});Performans
pybind11 en az ek yük getirir — çağrı başına genellikle birkaç yüz nanosaniye. Önemsiz olmayan işlevler için ihmal edilebilir düzeydedir; ucuz çağrılan işlevlere sahip sıkı döngülerde önem kazanır.
Alternatifler
Diğer Python-C++ köprüleri:
- Boost.Python — daha eski, daha ağır
- SWIG — birçok dili destekler
- nanobind — daha yeni, pybind11'den daha hızlı
Gerçek Dünya Kullanım Alanları
pybind11 şu amaçlar için idealdir:
- Python kullanıcıları için bir C++ kitaplığını sarmalamak
- C++ koduyla Python'daki sık çalıştırılan yolları hızlandırmak
- C++ uygulamalarıyla Python araçları arasında sayısal çekirdekleri paylaşmak
Hızlı Kontrol
pybind11 bir Python modülünü bildirmek için hangi makroyu kullanır?
Özet
pybind11, C++ kodunu Python için sarmalamayı neredeyse zahmetsiz hâle getirir. Modülleri PYBIND11_MODULE ile bildirin, işlevleri m.def ile, sınıfları ise py::class_ ile bağlayın. Yerleşik dönüşümler STL türlerini kapsar; NumPy dizileri kopyasız kullanılabilir.
Sıkça Sorulan Sorular
“pybind11 ile C++'tan Python Çağırma” dersi ücretsiz mi?
Evet — “pybind11 ile C++'tan Python Çağırma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.
“pybind11 ile C++'tan Python Çağırma” dersinde ne öğreneceğim?
pybind11 kullanarak C++ kodunu Python modülü olarak sarmalayın C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C++ Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“pybind11 ile C++'tan Python Çağırma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Extern C ve C ABI'si
- pybind11 ile C++'tan Python Çağırma
- Rust FFI Sınırları için C++
- Çok Dilli Bağlamalar için SWIG Kullanımı