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学习篇][书籍学习][python standrad library][内置类型]对象测试真值,布尔值操作, 比较操作
在Python中什么样的对象布尔(bool)值为False,什么样的对象布尔(bool)值为True可以用内置函数bool()判断对象的布尔值