Python C API 布尔对象

Posted

技术标签:

【中文标题】Python C API 布尔对象【英文标题】:Python C API Boolean Objects 【发布时间】:2015-02-18 05:42:22 【问题描述】:

我在我的 C++ 控制台应用程序中使用 Python C API 2.7.2。关于 存在一个疑问

我正在使用:

PyObject* myVariable = Py_True;

我是否需要使用 Py_DECREF(myVariable) 尊重 myVariable?

Python C API 文档说:-

Python True 对象。这个对象没有方法。它需要是 在引用计数方面就像任何其他对象一样对待。

我搜索了这些问题,但找不到明确的答案。

谢谢。

【问题讨论】:

【参考方案1】:

在引用计数方面,它需要像任何其他对象一样对待。

这意味着当您引用它时,您必须增加它


  Py_INCREF(Py_True);
  PyObject* myVariable = Py_True;

并且您必须在丢弃它时对其进行声明。

  Py_DECREF(myVariable);

【讨论】:

【参考方案2】:

虽然它不是动态创建的,但它必须被引用计数,因为 PyObject 变量可以保存任何 Python 对象。否则,将需要检查 Py_True 和散布在 Python 运行时的其他特殊情况以及使用该 API 的任何 C/C++ 代码。那会很混乱而且容易出错。

【讨论】:

以上是关于Python C API 布尔对象的主要内容,如果未能解决你的问题,请参考以下文章

Python C API 引用计数器

[python学习篇][书籍学习][python standrad library][内置类型]对象测试真值,布尔值操作, 比较操作

python3逻辑操作符

在Python中什么样的对象布尔(bool)值为False,什么样的对象布尔(bool)值为True可以用内置函数bool()判断对象的布尔值

使用 Python 和 C api 进行多线程

python 布尔与列表