首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问xrange内部结构

访问xrange内部结构
EN

Stack Overflow用户
提问于 2009-11-25 10:53:01
回答 2查看 359关注 0票数 4

我正在尝试使用ctype从内部python结构中提取数据。也就是说,我正在尝试读取xrange中的4个字段:

代码语言:javascript
复制
typedef struct {
    PyObject_HEAD
    long    start;
    long    step;
    long    len;
} rangeobject;

在python中有什么标准的方法来获取这些字段吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-25 16:47:17

您可以在没有ctypes的情况下访问所需数据

代码语言:javascript
复制
>>> obj = xrange(1,11,2)
>>> obj.__reduce__()[1]
(1, 11, 2)
>>> len(obj)
5

请注意,__reduce__()方法正好用于序列化。有关更多信息,请阅读this chapter in documentation

更新:但请确保您也可以使用ctypes访问内部数据:

代码语言:javascript
复制
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
票数 5
EN

Stack Overflow用户

发布于 2009-11-25 11:07:17

ctypes模块并不是用来访问Python内部的。ctypes允许您使用C语言处理C库,但使用Python进行编码。

您可能需要一个C扩展,它在很多方面与ctype相反。使用C扩展,您可以用Python术语处理Python代码,但用C语言处理代码。

更新:既然你想要纯Python,为什么你需要访问内置xrange对象的内部?xrange非常简单:在Python中创建自己的xrange,然后随心所欲地使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1794346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档