0Pricing
C++ Academy · Ders

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))   # 5

Sı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 str
  • std::vector<T> ↔ Python list
  • std::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

  1. Extern C ve C ABI'si
  2. pybind11 ile C++'tan Python Çağırma
  3. Rust FFI Sınırları için C++
  4. Çok Dilli Bağlamalar için SWIG Kullanımı
← C++ Academy Sayfasına Dön