首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >python与C++完全兼容吗?

python与C++完全兼容吗?
EN

Stack Overflow用户
提问于 2012-04-28 14:31:40
回答 2查看 1K关注 0票数 1

正如我所理解的,C和C++之间的关系,后者本质上是前者的扩展,并保持了一定程度的向后兼容性。假设用C++代码调用python是安全的吗?

更重要的是,我注意到正式的python文档将C和C++扩展捆绑在同一个页面上。我找不到一个C++ API。这使我相信在两种语言中使用相同的API是安全的。

有人能证实或否认这一点吗?

编辑:

我想我的问题比需要的要复杂得多。问题是:要用C++编写python模块,我必须做些什么?我是否只是遵循与列出的这里相同的指示,以C代码代替C++?有单独的API吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-28 14:50:07

我可以确认相同的Python在C和C++两种语言中都是安全的。然而,除非你会提出更具体的问题,否则很难给你提供更详细的答案。有很多的警告和问题,你应该知道。例如,您的Python扩展被定义为C类型结构,而不是C++,因此不要期望它们的构造函数/析构函数被隐式定义,而被称为

例如,从Python手册中的定义新类型获取示例代码,它可以用C++方式编写,甚至可以混合到C++类型中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// noddy.cpp
namespace {

struct noddy_NoddyObject
{
    PyObject_HEAD
    // Type-specific fields go here.
    std::shared_ptr<int> value; // WARNING
};

PyObject* Noddy_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
    try {
        Noddy *self = (Noddy *)type->tp_alloc(type, 0);
        if (self) {
            self->value = std::make_shared(7);
            // or more complex operations that may throw
            // or extract complex initialisation as Noddy_init function
            return self;
        }
    }
    catch (...) {
        // do something, log, etc.
    }
    return 0;
}

PyTypeObject noddy_NoddyType =
{
    PyObject_HEAD_INIT(NULL)
    // ...
}

} // unnamed namespace

但是,std::shared_ptr的构造函数和析构函数都不会被调用。因此,请记住为您的dealloc定义noddy_NoddyType函数,其中您将用nullptr重置value。您可能会问,为什么还要麻烦地将值定义为shared_ptr。如果您在C++中使用Python扩展(除了例外),以避免类型转换和转换,为了在实现定义中实现更无缝的集成,基于异常的错误处理可能会更容易,等等。尽管您的noddy_NoddyType对象是由纯C实现的机器管理的,但是由于dealloc函数的存在,value将根据众所周知的RAII规则发布。

在这里,您可以找到关于Python与C++语言几乎无缝集成的有趣示例:如何在c++代码中捕获

票数 4
EN

Stack Overflow用户

发布于 2012-04-28 14:41:57

Python可以在C++代码中调用。Python扩展是使用C扩展使用的相同的C++ API编写的,或者是使用一些第三方API编写的,比如boost::python

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

https://stackoverflow.com/questions/10368141

复制
相关文章
替换HTML里面的内容
数据结构 let data = [{ id : "p-1",value : "P-1C"}, { id : "p-2",value : "P-2C" }]
tianyawhl
2020/12/22
3.2K0
html 转换为cshtml,使用Html而不是csHtml
我想使用纯HTML页面而不是使用MVC .net的cshtml . 但是当我通过右键单击索引添加视图时,我只能看到两个选项 .
全栈程序员站长
2022/09/10
2.5K0
JS如何替换元素内容
http://mpvideo.qpic.cn/0bc3eaajwaaa4qaelx3bjvrvaigdtmqabgya.f10002.mp4?dis_k=4cf17def14cb58de5ca3ebc
itclanCoder
2022/12/07
10.8K0
CA1826:使用属性,而不是 Linq Enumerable 方法
此规则在具有等效但更高效的属性的类型集合上标记 Enumerable LINQ 方法调用,以提取相同的数据。
用户4268038
2022/02/19
6200
html 中的可替换(置换)元素
在 CSS 中,可替换元素(replaced element)的展现效果不是由 CSS 来控制的。这些元素是一种外部对象,它们外观的渲染,是独立于 CSS 的。
用户9914333
2022/07/21
3.2K0
html中align属性
成员名称 说明 AbsBottom 图像的下边缘与同一行中最大元素的下边缘对齐。 AbsMiddle 图像的中间与同一行中最大元素的中间对齐。 Baseline 图像的下边缘与第一行文本的下边缘对齐。 Bottom 图像的下边缘与第一行文本的下边缘对齐。 Left 图像沿网页的左边缘对齐,文字在图像右边换行。 Middle 图像的中间与第一行文本的下边缘对齐。 NotSet
闵开慧
2018/03/30
2.9K0
如何优雅的在SpringBoot中编写选择分支,而不是大量if else?
部门编号通常由公司或组织的管理人员根据实际情况进行规划和安排,各个部门的编号应当具有独立性、唯一性和易于记忆等特点,以方便在日常管理活动中使用。
Designer 小郑
2023/08/01
2450
如何优雅的在SpringBoot中编写选择分支,而不是大量if else?
leetcode之单词替换
这里用双层循环使用startsWith来判断是否命中词根,如果是则替换,如果前面命中的词根不是最短的,则后面遇到会被替换掉,最后再将替换后的words数组拼接为sentence。
code4it
2020/10/14
4690
leetcode之单词替换
leetcode之单词替换
这里用双层循环使用startsWith来判断是否命中词根,如果是则替换,如果前面命中的词根不是最短的,则后面遇到会被替换掉,最后再将替换后的words数组拼接为sentence。
code4it
2020/11/02
3940
Html中table的属性总结
border= “1”:给整个表格(包括表格及每一个单元格)加上1像素的黑色边框, 其等同于css中的: table,table tr th, table tr td { border:1px solid #0094ff; }
用户2323866
2021/06/24
1.8K0
HTML页面中的lang属性
lang属性的取值应该遵循 CP 47 - Tags for Identifying Languages
李郑
2018/03/01
3.3K0
为什么要用Getter和Setter方法,而不是公开属性
大多数字段的访问都是通过Getter和Setter方法来间接访问,为什么不直接将字段设置为公开属性Public呢?答案在于前者的未来可能性。当我在Java语言编程中开始我的职业生涯时,我就对Getter和Setter感到困惑。为什么要这么写呢?为什么不直接用Public呢?这对我来说是个奇怪的语法。
三哥
2018/12/17
2.2K1
为什么要用Getter和Setter方法,而不是公开属性
Flutter中的html内容加载
上一篇文章Flutter 中的下拉刷新和上拉加载中,我介绍了如何在Flutter中实现下拉刷新和上拉加载的效果,今天我们继续以上文中的代码为例,来介绍如何加载HTML文档内容。
拉维
2019/09/10
16.7K1
Flutter中的html内容加载
770.单词替换 (stringstream)
浪漫主义狗
2023/09/04
1360
博客网站最终是要让用户看的是内容而不是功能
很多的博客站长们感觉都非常注重自己博客网站的功能上的扩展和折腾,往往忽略了真正重要的内容建设,今天给网站加个炫酷的功能,明天加个那样的功能,折腾来折腾去没有输出多少有价值的内容出来,整个网站给人感觉没有多少深度,自然也就没哟几个用户愿意多回头来看看了,无论坚持多久博客的流量都不会有多大的提升的。
明月登楼的博客
2019/05/15
4970
博客网站最终是要让用户看的是内容而不是功能
770.单词替换 (stringstream)
770.单词替换 (stringstream) 原题链接 描述: 输入一个字符串,以回车结束(字符串长度不超过 100)。 该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。 现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。 输入格式 输入共 3 行。 第 1 行是包含多个单词的字符串 s; 第 2 行是待替换的单词 a(长度不超过 100); 第 3 行是 a 将被替换的单词 b(长度不超过 100)。 输出格式 共一行,输出将 s 中所有单词 a 替换成 b
浪漫主义狗
2022/07/11
5290
html中table表格里的内容如何居中「建议收藏」
<table border=”1″ style=”margin: auto;” width=’60%’>
全栈程序员站长
2022/10/02
11K0
react中添加html内容
直接用 小括号() 就可以,类似这样 state = { content:( <div> <p>Content</p> <p>Content</p> </div> ), }; ... render () { return ( <div> {this.state.cont
wo.
2021/06/15
5.2K0
单词替换,现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入一个字符串,以回车结束(字符串长度不超过 100100)。 该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。 现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。 输入格式 输入共 33 行。 第 11 行是包含多个单词的字符串 ss; 第 22 行是待替换的单词 aa(长度不超过 100100); 第 33 行是 aa 将被替换的单词 bb(长度不超过 100100)。 输出格式 共一行,输出将 ss 中所有单词 aa 替换成 bb 之后的字符串。 输入样例: You
莫浅子
2022/11/18
8290
CA1829:使用 Length/Count 属性,而不是 Enumerable.Count 方法
对支持等效且更高效的 Length 或 Count 属性的类型使用了 Count LINQ 方法。
用户4268038
2022/02/19
4840

相似问题

如何替换/替换属性名称,而不是其内容

46

替换HTML注释的内容,而不是注释本身

11

替换html内容而不替换标记或属性- PHP

11

Javascript:如何替换字符串的内容,而不是HTML标记中的内容?

22

替换内容而不是附加内容。

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文