Pull to refresh

Comments 5

Py_DECREF(*Py_Object).Он умеет сам проверять, не NULL ли передан в параметре, и если да — функция не делает ничего, в отличие от Py_DECREF(*Py_Object), которая в этом случае вернёт ошибку.

Не понимаю ничего в питоне, но кажется здесь опечатка: указано одинаковое название?
Пишу сюда, а не в личку, потому что не уверен что это ошибка, а не какая-то особенность которую я не понимаю.
Поправил очепятку, спасибо!

Почему бы в 21-м году 21-го века не воспользоваться достижениями прогресса, и не переложить заботы по управлению памятью на С++. Тогда с помощью https://github.com/pybind/pybind11 пишем на C++ модуль


#include <pybind11/pybind11.h>

int add(int i, int j) {
    return i + j;
}

struct Pet {
    Pet(const std::string &name) : name(name) { }
    void setName(const std::string &name_) { name = name_; }
    const std::string &getName() const { return name; }

    std::string name;
};

PYBIND11_MODULE(example, m) {
    m.doc() = "pybind11 example plugin"; // optional module docstring

    m.def("add", &add, "A function which adds two numbers");

    py::class_<Pet>(m, "Pet")
        .def(py::init<const std::string &>())
        .def("setName", &Pet::setName)
        .def("getName", &Pet::getName);
}

и используем его в Python:


>>> import example
>>> example.add(1, 2)
3L
>>> p = example.Pet('Molly')
>>> print(p)
<example.Pet object at 0x10cd98060>
>>> p.getName()
u'Molly'
>>> p.setName('Charly')
>>> p.getName()
u'Charly'

pybind11 хорош, сам его часто использую. Но если проект целиком на C, то его использовать не выйдет.

Может немного не в тему. А никто не встречал реализации микропитона в виде С++ библиотеки для микроконтроллеров? Например для ESP32?
Sign up to leave a comment.

Articles