boost python单步调试_Boost Python学习笔记(三)
你将学到什么
在C++中调用Python代码时的传参问题
基础类型
继续使用前面的项目,但是先修改下Python脚本(zoo.py),添加Add和Str函数,分别针对整数、浮点数和字符串参数的测试
def Add(x, y):
print(x + y)
def Str(s):
print("Output: " + s)
if __name__ == '__main__':
pass
然后修改下main.cpp源文件
#include
#include
#include "boost_wrapper.h"
using namespace boost::python;
using namespace boost::python::detail;
int main()
{
Py_Initialize();
if (!Py_IsInitialized())
{
std::cout << "Initialize failed" << std::endl;
return -1;
}
try
{
object sys_module = import("sys");
str module_directory(".");
sys_module.attr("path").attr("insert")(1, module_directory);
object module = import("zoo");
module.attr("Add")(object(2), object(4));
module.attr("Add")(object(3.0f), object(4));
module.attr("Str")(object("test"));
}
catch (const error_already_set&)
{
PyErr_Print();
}
Py_Finalize();
return 0;
}
编译并测试
# cd build
# make
# ./core
6
7.0
Output: test
类实例
首先修改下Python脚本(zoo.py),添加Pet函数,针对类实例参数的测试,其参数为Animal类实例
import boost
def Pet(obj):
obj.eat("meat")
print(type(obj))
print(isinstance(obj, boost.Animal))
if __name__ == '__main__':
pass
然后修改下main.cpp源文件
#include
#include
#include "boost_wrapper.h"
using namespace boost::python;
using namespace boost::python::detail;
int main()
{
Py_Initialize();
if (!Py_IsInitialized())
{
std::cout << "Initialize failed" << std::endl;
return -1;
}
try
{
object sys_module = import("sys");
str module_directory(".");
sys_module.attr("path").attr("insert")(1, module_directory);
object module = import("zoo");
object o = class_("Animal", init<:string>())
.def("call", &Animal::call)
.def("move", &Animal::move)
.def("eat", &Animal::eat)("Wangcai");
module.attr("Pet")(o);
}
catch (const error_already_set&)
{
PyErr_Print();
}
Py_Finalize();
return 0;
}
编译并测试
# cd build
# make
# ./core
Wangcai: eat meat
False
标准库
首先修改下Python脚本(zoo.py),添加tList、tDict和tTuple函数,分别用于测试std::vector/std::list、std::map以及数组
def tList(l):
for i in l:
print(i)
def tDict(d):
for k in d:
print(str(k) + ":" + str(d[k]))
def tTuple(t):
for i in t:
print(i)
if __name__ == '__main__':
pass
然后修改下main.cpp源文件
#include
#include
#include
#include "boost_wrapper.h"
using namespace boost::python;
using namespace boost::python::detail;
int main()
{
Py_Initialize();
if (!Py_IsInitialized())
{
std::cout << "Initialize failed" << std::endl;
return -1;
}
try
{
object sys_module = import("sys");
str module_directory(".");
sys_module.attr("path").attr("insert")(1, module_directory);
object module = import("zoo");
list l;
l.append(2);
l.append("dog");
std::vector v = {3, 4, 5, 6};
for (auto item : v)
l.append(item);
module.attr("tList")(l);
dict d;
d.setdefault("fwd", 28);
d.setdefault("xb", 26);
module.attr("tDict")(d);
tuple t = make_tuple("fwd", 28, "xb", 26);
module.attr("tTuple")(t);
}
catch (const error_already_set&)
{
PyErr_Print();
}
Py_Finalize();
return 0;
}
编译并测试
# cd build
# make
# ./core
2
dog
3
4
5
6
fwd:28
xb:26
fwd
28
xb
26
总结
类实例还是尽量导出后在Python脚本中创建,如果在C++代码中创建,然后传入Python脚本的话,它的类型并不是boost.Animal,这就导致无法使用isinstance来区分对象。
boost python单步调试_Boost Python学习笔记(三)相关推荐
- python 容器类型存放_Python学习笔记三(容器)
基本数据类型 int Python3中的整数只有int,没有long类型,int最大值如下, Python3中int的最大值的获取 float Python3中float 默认保留一位小数,/ 除法默 ...
- Python基础学习笔记三
Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...
- Python学习笔记三之编程练习:循环、迭代器与函数
Python学习笔记三之编程练习 1. 编程第一步 # 求解斐波纳契数列 #/user/bin/python3#Fibonacci series:斐波那契数列 #两个元素的总和确定了下一个数 a,b= ...
- Python基础教程-菜鸟教程学习笔记1
Python基础教程-菜鸟教程学习笔记1 文章目录 Python基础教程-菜鸟教程学习笔记1 前言 Python 简介 1. 第一个Python程序 2. Python 中文编码 3. 基本语法 1) ...
- Python预测 数据分析与算法 学习笔记(特征工程、时间序列)
微信公众号:数学建模与人工智能 GitHub - QInzhengk/Math-Model-and-Machine-Learning 第3章 探索规律 3.1 相关分析 相关关系是一种与函数关系相区别 ...
- Python可视化物理随机过程---pygame学习笔记2
Python可视化物理随机过程-pygame学习笔记2 文章目录 Python可视化物理随机过程---pygame学习笔记2 一.扩散现象的简单的介绍 二.代码实现 三.运行代码的效果展示 四.总结 ...
- ROS学习笔记三:创建ROS软件包
,# ROS学习笔记三:创建ROS软件包 catkin软件包的组成 一个软件包必须满足如下条件才能被称之为catkin软件包: 这个软件包必须包含一个catkin编译文件package.xml(man ...
- iView学习笔记(三):表格搜索,过滤及隐藏列操作
iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...
- python3常用模块_Python学习笔记三(常用模块)
Python 学习笔记三 (常用模块) 1.os模块 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果. os.name:返回当前操作系统名称( ...
- 吴恩达《机器学习》学习笔记三——多变量线性回归
吴恩达<机器学习>学习笔记三--多变量线性回归 一. 多元线性回归问题介绍 1.一些定义 2.假设函数 二. 多元梯度下降法 1. 梯度下降法实用技巧:特征缩放 2. 梯度下降法的学习率 ...
最新文章
- WPF中ControlTemplate和DataTemplate的区别
- 小县城也被互联网+撞了一下腰
- 10种常用降维算法源代码(python)
- HDFS的副本存放策略(机架感知策略)
- 国内知名互联网公司的开源项目
- 获取本机IP地址[JavaScript / Node.js]
- 200(强缓存)和304(协商缓存)的区别
- 成为Java流大师–第5部分:将联接的数据库表转换为流
- BaseYii_autoload
- pojBuy Tickets2828线段树或者树状数组(队列中倒序插队)
- css @语法,@规则 @import @charset @font-face @fontdef @media @page
- VB计算文本文件的行数
- git clone --depth=1引起的问题
- 联想电脑的计算机,联想笔记本系统按F几下|联想计算机的系统按钮是什么?
- 台达plc控制伺服电机编程实例_三菱Q系列PLC控制伺服电机编程实例
- android系统存储空间不足怎么办,手机内存不足怎么办?手机内存不足如何清理?...
- Postgresql临时表
- iOS7—Day by day—Day16:Decoding QR Codes With AVFoundation
- 03_跳转sucess方法和error方法
- 奇技淫巧(二)—— 不使用中间变量交换两个值