gpt4 book ai didi

python - 获取 Boost 中的参数列表 :Python function

转载 作者:太空宇宙 更新时间:2023-11-03 18:59:06 24 4
gpt4 key购买 nike

在CPython中,我们可以通过以下方法获取函数的参数列表。函数名称是“aMethod”

import inspect
inspect.getargspec(aMethod)

aMethod.func_code.co_varnames

如何为 Boost:Python 函数实现同样的效果?当我使用这些方法时,出现以下错误。

第一种方法类型错误:不是 Python 函数

第二种方法AttributeError:“aMethod”对象没有属性“func_code”

最佳答案

访问 boost::python::object 上的 Python 属性时,使用attr成员函数。例如:

aMethod.func_code.co_varnames

会变成

aMethod.attr("func_code").attr("co_varnames")
<小时/>

这是一个完整的示例。

#include <iostream>
#include <vector>

#include <boost/foreach.hpp>
#include <boost/python.hpp>
#include <boost/python/stl_iterator.hpp>

void print_varnames(boost::python::object fn)
{
namespace python = boost::python;
typedef python::stl_input_iterator<std::string> iterator;

std::vector<std::string> var_names(
iterator(fn.attr("func_code").attr("co_varnames")),
iterator());

BOOST_FOREACH(const std::string& varname, var_names)
std::cout << varname << std::endl;
}

BOOST_PYTHON_MODULE(example)
{
def("print_varnames", &print_varnames);
}

用法:

>>> def test1(a,b,c): pass
...
>>> def test2(spam, eggs): pass
...
>>> def test3(): pass
...
>>> from example import print_varnames
>>> print_varnames(test1)
a
b
c
>>> print_varnames(test2)
spam
eggs
>>> print_varnames(test3)
>>>

关于python - 获取 Boost 中的参数列表 :Python function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16481844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com