boost库 python_Boost.Python简介-阿里云开发者社区
Boost.Python簡單概括:是Boost庫的一部分;用來在C++代碼中調(diào)用python代碼以及在Python代碼中調(diào)用C++代碼,并且避免用戶直接操作指針。
簡介
BoostPython庫讓C++和Python幾乎無縫結(jié)合,是Boost庫的一個功能。
用BoostPython庫,能快速、容易地將C++輸出到Python,使得Python接口和C++接口非常像。它被設(shè)計(jì)成盡可能貼近你的C++設(shè)計(jì)。大多數(shù)情況下,你不需要修改C++類就能在Boost.Python中使用它。系統(tǒng)會簡單地映射你的C++類和函數(shù)到Python。Boost.Python的這種綁定,是純C++實(shí)現(xiàn)的,除了編輯器和編譯器你什么別的都不需要。
Boost.Python和Python C API的關(guān)系
Python已經(jīng)提供了API,用于粘合Python和C。那Boost::Python又是什么?Boost::Python是Python/C API的一個封裝(wrapper)。
使用Python/C API,你需要在Python和C代碼之間傳遞指針的前后,手動處理指針問題,比如指針不再指向原來的對象時,Boost::Python接管了這項(xiàng)任務(wù),自動處理。此外,Boost::Python使我們能用C++的OOP方式,在Python對象上寫操作。
比如,對于Python代碼y=object_x[i],同樣的功能用Python/C API實(shí)現(xiàn),需要這樣寫:
y=PySequence_GetItem(object_x, i);
作為對比,用Boost::Python這樣寫就行了:
y=object_x[i];
此外,Boost::Python使得將我們的C++類輸出為Python變得容易,甚至都不需要改變。Boost::Python的設(shè)計(jì)理念是:用戶永遠(yuǎn)不需要接觸PyObject*。
如果你需要潛在Python/C API
用了Boost:Python后仍然可以用Python/C API寫東西。甚至都不必引入python.h頭文件,就可以用相關(guān)的函數(shù)了。比如在C++中清除掉一個Python錯誤,可以在一個Boost::Python程序中插入這行:
PyErr_Clear();
在C++中,Python/C API用PyObject指針來表示Python對象。而在Boost::Python中,這些用boost::python::object類的實(shí)例來封裝(替代了直接用指針的表示)。
你如果需要某個boost::python::object的PyObject,可以通過boost::python::object的ptr()方法來獲取到,它返回的是一個PyObject*。然后你可以使用Python/C API調(diào)用。比如,我有個boost::python:object的實(shí)例叫boostObj,我想知道它是否有一個叫做myAttributeName的屬性,那就:
PyObject_HasAttrString(boostObj.ptr(), "myAttributeName");
總結(jié)
以上是生活随笔為你收集整理的boost库 python_Boost.Python简介-阿里云开发者社区的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑记事本快捷键win10如何设置
- 下一篇: 电脑开机动画_领克的开机画面,你修改了?