如何让 Pybind11 位置参数名称显示在 help() 上?

How to have Pybind11 positional-argument names show up on help()?

double foo(int x, int y, double dx, double dy) {...};

PYBIND11_MODULE(mymodule, m) {
    m.doc() = "Module docstring";
    m.def("foo", &foo, "Function docstring");
}

安装后,帮助页面不包含位置参数名称,而是替换为 arg<#>:

>>> from mymodule import foo
>>> help(foo)

Help on built-in function foo in module mymodule:

foo(...) method of builtins.PyCapsule instance
    foo(arg0: int, arg1: int, arg2: float, arg3: float) -> float

    Function docstring

你需要传递他们的名字。以下是如何操作的两个版本:

double foo(int x, int y, double dx, double dy) {...};

PYBIND11_MODULE(mymodule, m) {
    m.doc() = "Module docstring";
    // First version:
    using namespace pybind11::literals;
    m.def("foo", &foo, "Function docstring", "x"_a, "y"_a, "dx"_a, "dy"_a);
    // Second version:
    m.def("foo", &foo, "Function docstring", py::arg("x"), py::arg("y"), py::arg("dx"), py::arg("dy"));
}

这两个版本是相同的 - 第一个是第二个使用用户定义文字的语法糖。