UsA*_*R33 4 python ctypes cpython xrange
我正在尝试使用ctypes从内部python结构中提取数据.也就是说,我正在尝试读取xrange中的4个字段:
typedef struct {
PyObject_HEAD
long start;
long step;
long len;
} rangeobject;
Run Code Online (Sandbox Code Playgroud)
有没有标准的方法来获取python本身的这些领域?
您无需访问所需数据ctypes:
>>> obj = xrange(1,11,2)
>>> obj.__reduce__()[1]
(1, 11, 2)
>>> len(obj)
5
Run Code Online (Sandbox Code Playgroud)
请注意,该__reduce__()方法完全用于序列化.有关详细信息,请阅读文档中的本章.
更新:但您也可以确保您也可以访问内部数据ctypes:
from ctypes import *
PyObject_HEAD = [
('ob_refcnt', c_size_t),
('ob_type', c_void_p),
]
class XRangeType(Structure):
_fields_ = PyObject_HEAD + [
('start', c_long),
('step', c_long),
('len', c_long),
]
range_obj = xrange(1, 11, 2)
c_range_obj = cast(c_void_p(id(range_obj)), POINTER(XRangeType)).contents
print c_range_obj.start, c_range_obj.step, c_range_obj.len
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |