pybind11:从 c/c++ 获取 python 函数的参数数量
pybind11: from c/c++ get number of arguments to python function
在pybind11中,我有一个pybind11::function
类型的变量。在 C++ 中,有什么方法可以确定该函数需要多少个参数?也就是说,如果它来自 def f(a, b)
,答案将是 2。我意识到这可能会变得疯狂 w/r *arks、kwargs、self 等...
需要说明的是,这是在 C++ 内部,所以我正在寻找 C++ 代码。
下面是如何使用 inspect.signature()
:
from inspect import signature
import os # I only imported os to demonstrate with one of its functions
print(signature(os.remove)) # Print out the arguments for the remove fumction from the os module
输出:
(path, *, dir_fd=None)
下面是如何在 pybind11 中执行此操作:
#include <pybind11/pybind11.h>
#include <pybind11/embed.h>
pybind11::function callback_; // from somewhere!
pybind11::module inspect_module = pybind11::module::import("inspect");
pybind11::object result = inspect_module.attr("signature")(callback_).attr("parameters");
auto num_params = pybind11::len(result);
// num_params is an int
在pybind11中,我有一个pybind11::function
类型的变量。在 C++ 中,有什么方法可以确定该函数需要多少个参数?也就是说,如果它来自 def f(a, b)
,答案将是 2。我意识到这可能会变得疯狂 w/r *arks、kwargs、self 等...
需要说明的是,这是在 C++ 内部,所以我正在寻找 C++ 代码。
下面是如何使用 inspect.signature()
:
from inspect import signature
import os # I only imported os to demonstrate with one of its functions
print(signature(os.remove)) # Print out the arguments for the remove fumction from the os module
输出:
(path, *, dir_fd=None)
下面是如何在 pybind11 中执行此操作:
#include <pybind11/pybind11.h>
#include <pybind11/embed.h>
pybind11::function callback_; // from somewhere!
pybind11::module inspect_module = pybind11::module::import("inspect");
pybind11::object result = inspect_module.attr("signature")(callback_).attr("parameters");
auto num_params = pybind11::len(result);
// num_params is an int