- 简短版本**
我最近遇到了一些Python代码,其中函数的返回类型在文档中被指定为PyObject
。什么是PyObject
?
- 详细版本**
我不是一个C/C ++程序员,但是当我在上面链接的文档中遇到PyObject
时,Google告诉我PyObject
是一个Python对象,是使用Python/C API定义的,具体来说,API文档对PyObject的定义如下:
所有的对象类型都是这个类型的扩展。这个类型包含了Python将一个指向对象的指针视为一个对象所需要的信息。在一个普通的"发布"版本中,它只包含了对象的引用计数和一个指向相应类型对象的指针。它对应于PyObject_HEAD宏的扩展所定义的字段。
坦率地说,我并不完全理解这一点,或者它是否回答了我的基本问题,但这并不使我认为仅仅将PyObject
视为Python对象是明显错误的,就此打住。另一方面,也许从技术上讲,要算作PyObject
,该类型必须是使用Python/C API作为标准Python的扩展创建的。例如,整数是PyObject
吗
- 潜在相关链接**
- https://numpy.org/doc/stable/reference/c-api/types-and-structures.html
- https://numpy.org/doc/stable/user/c-info.beyond-basics.html#adding-the-new-data-type
2条答案
按热度按时间dxxyhpgq1#
在Python中,你能接触到的每个值在C中都是
PyObject
,包括列表、字典、套接字、文件、整数、字符串、函数、类,只要你能说出它们的名字,在Python中,它就是PyObject
。3b6akqbq2#
一个
PyObject
实际上只是一个C层的Python对象,因为Python中的整数是对象,所以它们也是PyObject
s,不管它是用Python还是用C编写的,它在C层都是一个PyObject
。