您要查找的代码是here:class list : public object {

public:

PYBIND11_OBJECT_CVT(list, object, PyList_Check, PySequence_List)

explicit list(size_t size = 0) : object(PyList_New((ssize_t) size), stolen_t{}) {

if (!m_ptr) pybind11_fail("Could not allocate list object!");

}

size_t size() const { return (size_t) PyList_Size(m_ptr); }

detail::list_accessor operator[](size_t index) const { return {*this, index}; }

detail::list_iterator begin() const { return {*this, 0}; }

detail::list_iterator end() const { return {*this, PyList_GET_SIZE(m_ptr)}; }

template void append(T &&val) const {

PyList_Append(m_ptr, detail::object_or_cast(std::forward(val)).ptr());

}

};

还要记住,py::list继承自py::object,后者又从{}继承(这也意味着您是通过引用传递的)。根据我的经验,这种用法的文档很少,阅读代码是最好的选择。在

我们可以从类定义中看到,我们可以使用成员函数^ {CD4>},^ {< CD5>},^ {< CD6>},^ {< CD7>}(C++迭代器!)和append(模板化!)。如果这还不够,可以使用^{} to access python attributes(包括方法)。下面是一个例子:

Python代码(some_python.py):

^{2}$

C++代码(^ {CD11>}):/*

setup_pybind11(cfg)

%> */

#include

#include

#include

namespace py = pybind11;

void test(py::list l) {

l.attr("pop")();

std::cout << "List has length " << l.size() << std::endl;

for (py::handle obj : l) { // iterators!

std::cout << " - " << obj.attr("__str__")().cast<:string>() << std::endl;

}

l.append(10); // automatic casting (through templating)!

}

void float_cast(py::list l) {

float f = l.cast();

}

PYBIND11_MODULE(some_cpp, m) {

m.def("test", &test);

m.def("float_cast", &float_cast);

}

输出:List has length 4

- 1

- 2

- 3

- 4

after C++ [1, 2, 3, 4, 10]

Traceback (most recent call last):

File "some_python.py", line 9, in

cpp.float_cast(l)

RuntimeError: Unable to cast Python instance to C++ type (compile in debug mode for details)

正如你所看到的,我还包括了你的具体问题,铸造成一个浮动。这里我使用了cast方法py::handle,这是一个很好的异常。您可以尝试“直接”强制转换对象(类似于float* f = (float*) &l;),但这会给您带来垃圾,我想这不是您要寻找的。在

另一句话:^ {< CD15>}允许Python的标准类型和C++版本之间的转换。例如,list可以转换为std::vector,包括类型检查。这样做的一个重要影响是,数据作为副本而不是作为引用传递。在

python bind_pybind如何对py::list对象进行操作相关推荐

  1. 硬核!Python 四种变量的代码对象和反汇编分析

    作者 | 大奎 整理 | 阳哥 来源丨Python数据之道 在Python基础的学习过程中,对变量和参数的理解有助于我们从更基础层面了解Python语言的运行.在这个过程中,还是有不少冷门和细节的地方 ...

  2. Python 模块之 string.py

    用法 字符串常量: import string print(string.ascii_lowercase) print(string.ascii_uppercase) print(string.asc ...

  3. python如何运行py程序_如何用Python汇款:Web3.py教程

    Python开发人员对于以太坊和区块链库的技术练习. 警告:下面的教程包含这些元素:显式加密.点对点金融服务以及可能的违规行为.这些例子仅仅是为了说明Python区块链的强大功能和便捷性. 嗨,Pyt ...

  4. 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、并且——queryset对象序列化...

    第三百零九节,Django框架,models.py模块,数据库操作--F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...

  5. Python 代码理解 polygon.py

    Python 代码理解 polygon.py 1.运行和阅读代码 该代码的主要功能为通过调用不同的包,设置不同的线段数.线段长度和角度等条件,进行不同图形的绘制. 经过环境配置和代码阅读后,初步运行代 ...

  6. 孤荷凌寒自学python第四十一天python的线程同步之Event对象

    孤荷凌寒自学python第四十一天python的线程同步之Event对象 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 鉴于Lock锁与RLock锁均宣告没有完全完成同步文件操作的问题,于是 ...

  7. SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理

    SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理 本文连接 简介 SIGIA_4P 网址 a. 课程OKR Objectives and ...

  8. 【python初级】hasattr函数判断对象是否包含某属性

    [python初级]hasattr函数判断对象是否包含某属性 1.背景 2.语法 3.示例 1.背景 hasattr函数是python的内置函数,类似print函数一样. hasattr函数用于判断对 ...

  9. python web.py教程_如何用Python汇款:Web3.py教程

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. Python开发人员对于以太坊和区块链库的技术练习. 警告:下面的教程包含这些元素:显式加密.点对点金融服 ...

最新文章

  1. 混合云备份利用自定义Workflow保护MySQL的实践
  2. 程序员的“凡尔赛文学”大赏!
  3. Linux内核编译学习1
  4. SimpleExecutor.doQuery()-创建StatementHandler
  5. 网管交换机与非网管交换机的利弊介绍
  6. Flask 第三方组件之 script
  7. 算法训练营 重编码_关于如何在没有训练营的情况下学习编码的10条提示
  8. 谷歌中国 AI 中心要凉?李飞飞否认将离职
  9. 配置多个ssh-key
  10. 智能家居APP原型设计(附下载链接)—基于物联网的终端设备设计研究—Axure9高保真原型设计
  11. 阿里云活动价格点击购买时价格上涨的解决办法
  12. java实现导出内容不固定的word文档
  13. 基于JAVA博物馆交流平台计算机毕业设计源码+系统+lw文档+部署
  14. 浅谈自然语言处理(NLP)和 自然语言理解(NLU)
  15. JVM如何识别“到底谁才是垃圾“?
  16. 黑客攻破美一女孩房间安全摄像头并称自己是圣诞老人
  17. 撸了几行骚代码,解放了双手
  18. excel如何将内容拆分为多个表格?
  19. 安卓手机投屏软件_安卓投屏软件eshow下载
  20. MySQL数据库重启报错“the server quit without updating PID file”处理方法

热门文章

  1. android刘海屏幕分辨率,Android全面屏刘海适配
  2. 阿里巴巴图标库iconfont,svg图标颜色无法改变的解决方案
  3. 移动机器人+机械手臂+视觉定位抓取物料
  4. 12.6V/8.4V锂离子或锂聚合物电池充电器
  5. 关于volatile的详解
  6. IOS 3D Touch 开发教程
  7. 创建你的第一个Vue 3项目
  8. 支付宝个人支付到账通知接口
  9. 餐饮连锁APP开发解决方案
  10. 软件测试职业规划的思考