首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Boost-Python查找函数具有的参数数。

使用Boost-Python查找函数具有的参数数。
EN

Stack Overflow用户
提问于 2013-01-06 10:36:33
回答 2查看 424关注 0票数 0

我在python中有一个用户定义的函数,我不知道它有多少参数。也就是说,它可以

代码语言:javascript
复制
def f1(x,y,z):
  return  sin(x)*cos(y)*tan(z)

代码语言:javascript
复制
def f1(x):
  return  sin(x)

如何使用Boost-Python来查找函数有多少参数?,如果我只有一个函数参数,我总是可以这样计算:

代码语言:javascript
复制
  bp::object f1 = main_dict["f1"];
  std::cout << bp::extract<double>(f1(0.0)) << std::endl;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-07 14:47:15

对于python中的用户定义函数,可以通过易性特殊属性提取函数的func_code。该属性表示编译后的函数体,并提供了一个co_argcount属性,指示函数的可用性。有关更多信息和其他可能的方法,请考虑阅读问题。

忽略错误检查,Boost.Python实现变得相当琐碎:

代码语言:javascript
复制
boost::python::extract<std::size_t>(fn.attr("func_code").attr("co_argcount"));

以下是一个完整的简单示例:

代码语言:javascript
复制
#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);
}

以及它的用法:

代码语言:javascript
复制
>>> from example import print_arity
>>> def f1(x,y,z): pass
... 
>>> print_arity(f1)
3
>>> def f1(x): pass
... 
>>> print_arity(f1)
1
票数 2
EN

Stack Overflow用户

发布于 2013-01-06 21:00:20

代码语言:javascript
复制
def foobar(x, *args):
    return len(args) + 1

参数列表中的*args将参数列表中未显式定义的所有额外参数分配给list args (这个名称是用户定义的)。假设函数必须至少有一个参数,则上面的函数将返回参数数。

免责声明:,我对Boost.Python没有任何经验。这个答案仅仅是Python中的实现,将返回值传递给C++取决于用户。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14181303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档