对于python中的用户自定义函数,可以通过特殊属性来提取函数的arity 。func_code
该属性表示编译后的函数体,并提供co_argcount
指示函数的数量的属性。有关更多信息和其他可能的方法,请考虑阅读此问题。
忽略错误检查,Boost.Python 实现变得相当简单:
boost::python::extract<std::size_t>(fn.attr("func_code").attr("co_argcount"));
这是一个完整的简短示例:
#include <iostream>
#include <boost/python.hpp>
void print_arity(boost::python::object fn)
{
std::size_t arity = boost::python::extract<std::size_t>(
fn.attr("func_code").attr("co_argcount"));
std::cout << arity << std::endl;
}
BOOST_PYTHON_MODULE(example)
{
def("print_arity", &print_arity);
}
及其用法:
>>> from example import print_arity
>>> def f1(x,y,z): pass
...
>>> print_arity(f1)
3
>>> def f1(x): pass
...
>>> print_arity(f1)
1