Python 嵌入——如何从 C/C++ 获取 if() 真值测试行为?
我正在尝试编写一个函数来返回给定 PyObject 的真值。 该函数应该返回与 if() 真值测试相同的值——空列表和字符串为 False 等。 我一直在查看 python/include 标头,但没有找到任何似乎可以做到这一点的东西。 我最接近的是 PyObject_RichCompare(),第二个值是 True,但返回 False,例如“1”== True。 是否有一个方便的函数来执行此操作,或者我是否必须针对一系列类型进行测试并对每种可能的类型进行特殊情况测试? if()的内部实现做了什么?
I'm trying to write a function to return the truth value of a given PyObject. This function should return the same value as the if() truth test -- empty lists and strings are False, etc.
I have been looking at the python/include headers, but haven't found anything that seems to do this. The closest I came was PyObject_RichCompare() with True as the second value, but that returns False for "1" == True for example.
Is there a convenient function to do this, or do I have to test against a sequence of types and do special-case tests for each possible type? What does the internal implementation of if() do?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这不是在 object.h: 中吗
?
Isn't this it, in object.h:
?
使用
int PyObject_IsTrue(PyObject *o)
如果对象 o 被认为是 true,则返回 1,否则返回 0。 这相当于 Python 表达式 not not o。 失败时返回-1。
(来自 Python/C API 参考手册)
Use
int PyObject_IsTrue(PyObject *o)
Returns 1 if the object o is considered to be true, and 0 otherwise. This is equivalent to the Python expression not not o. On failure, return -1.
(from Python/C API Reference Manual)