0Pricing
C++ Academy · Pelajaran

Memanggil Python dari C++ melalui pybind11

Bungkus kode C++ sebagai modul Python menggunakan pybind11

Memanggil Python dari C++ melalui pybind11 adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Mengapa pybind11?

pybind11 adalah pustaka hanya-header yang membuat binding Python untuk kode C++ dengan kode pendukung minimal. Pustaka ini digunakan oleh SciPy, TensorFlow, dan banyak proyek lainnya.

Modul Minimal

Definisikan modul Python dalam satu file menggunakan makro PYBIND11_MODULE.

#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");
}

Membangun Modul

Bangun sebagai modul ekstensi Python — biasanya dengan CMake atau setuptools.

# CMake
find_package(pybind11 REQUIRED)
pybind11_add_module(mymodule mymodule.cpp)

Menggunakan dari Python

Impor dan gunakan seperti modul Python lainnya.

# Python
import mymodule
print(mymodule.add(2, 3))   # 5

Mengekspos Kelas

Gunakan py::class_ untuk mengikat kelas C++. Konstruktor, metode, dan properti semuanya dipetakan ke padanan Python.

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);
}

Konversi Tipe

pybind11 mengonversi tipe umum secara otomatis:

  • std::string ↔ str Python
  • std::vector<T> ↔ list Python
  • std::map ↔ dict Python
  • Numerik ↔ int/float Python

Interoperabilitas NumPy

Teruskan array NumPy sebagai py::array_t<T>. Akses buffer untuk operasi tanpa penyalinan.

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;
}

Lambda sebagai Binding

Ikat lambda secara langsung saat Anda ingin mengubah argumen atau membungkus perilaku.

m.def("show", [](const Point& p) {
    return "(" + std::to_string(p.x()) + ", " + std::to_string(p.y()) + ")";
});

Melepaskan GIL

Untuk komputasi C++ yang lama, lepaskan GIL agar thread Python lain dapat berjalan.

m.def("slow", []() {
    py::gil_scoped_release release;
    // expensive C++ work, no Python access
});

Kinerja

pybind11 menambahkan overhead minimal — biasanya beberapa ratus nanodetik per pemanggilan. Tidak berarti untuk fungsi yang tidak sederhana; tetapi berpengaruh dalam perulangan ketat dengan fungsi yang dipanggil dan berbiaya rendah.

Alternatif

Jembatan Python-C++ lainnya:

  • Boost.Python — lebih lama dan lebih berat
  • SWIG — mendukung banyak bahasa
  • nanobind — lebih baru dan lebih cepat daripada pybind11

Kasus Penggunaan di Dunia Nyata

pybind11 ideal untuk:

  • Membungkus pustaka C++ bagi pengguna Python
  • Mempercepat jalur panas Python dengan kode C++
  • Berbagi kernel numerik antara aplikasi C++ dan perkakas Python

Pemeriksaan Singkat

Makro apa yang digunakan pybind11 untuk mendeklarasikan modul Python?

Ringkasan

pybind11 membuat pembungkusan C++ untuk Python hampir tanpa usaha. Deklarasikan modul dengan PYBIND11_MODULE, ikat fungsi dengan m.def, dan ikat kelas dengan py::class_. Konversi bawaan mencakup tipe STL; array NumPy tidak memerlukan penyalinan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Memanggil Python dari C++ melalui pybind11” gratis?

Ya — teks lengkap “Memanggil Python dari C++ melalui pybind11” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Memanggil Python dari C++ melalui pybind11”?

Bungkus kode C++ sebagai modul Python menggunakan pybind11 Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Memanggil Python dari C++ melalui pybind11” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Extern C dan ABI C
  2. Memanggil Python dari C++ melalui pybind11
  3. C++ untuk Batas FFI Rust
  4. Menggunakan SWIG untuk Binding Multibahasa
← Kembali ke C++ Academy