V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
baishuigansijun
V2EX  ›  Python

PyObject 能访问 PyLongObject 内容么

  •  
  •   baishuigansijun · 2020-08-03 12:43:56 +08:00 · 1496 次点击
    这是一个创建于 1576 天前的主题,其中的信息可能已经有所发展或是发生改变。

    PyLongObject 头部信息是一个 PyVarObject,PyObject能访问到引用次数和类型信息,那 PyObject能不能访问到 PyLongObject 所维护的真实 int 值

    fasionchan
        1
    fasionchan  
       2020-08-03 15:08:26 +08:00   ❤️ 1
    如果你确定它是一个 PyLongObject,那么你可以将 PyObject 指针强制转换成 PyLongObject 指针,这样就能访问了。另外,PyLongObject 里面不是保存一个 int 值,而是通过 int 数组实现的大整数,它的表示访问比 int 大的多。

    我写的《 Python 源码剖析》专栏中有两个下节专门介绍这个:

    - int 对象,永不溢出的整数
    - int 源码解析:如何实现大整数运算?

    有兴趣可以看看,地址是: https://www.imooc.com/read/76
    baishuigansijun
        2
    baishuigansijun  
    OP
       2020-08-03 16:34:00 +08:00
    @fasionchan 我一直不理解这段话,在 Python 中,而所有的对象都拥有 PyObject,这就使得在 Python 中,对"对象"的引用变得非常统一,我们只需要一个 PyObject *就可以引用任意一个对象,而不需要管这个对象实际是一个什么对象。所以在 Python 中,所有的变量、以及容器内部的元素,本质上都是一个 PyObject *。这个引用指的是 PyObject*可以替代 PyxxxObject*么,可以通过 PyObject*获取 type 信息然后能获取到 PyxxxObject 中的除了引用计数和 type 信息之外的信息不?
    sujin190
        3
    sujin190  
       2020-08-03 18:55:32 +08:00
    @baishuigansijun #2 本来就是这样,先判断类型,依据类型转换成对应类型指针,接着就该干嘛干嘛了啊,c 学的不扎实啊,不止 python 这么干,你可以研究研究其他类型语言,底层差不多都是这么干的
    ruanimal
        4
    ruanimal  
       2020-08-04 09:51:01 +08:00
    @baishuigansijun PyObject 就是 C 代码了,跟 Python 关系不大了,只要你找到内存位置,可以直接 cast 啊。

    要剖析 c 的实现,看《 Python 源码剖析》这本书

    ps: 不清楚这书和 1 楼的课程有啥关系
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1035 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 21:18 · PVG 05:18 · LAX 13:18 · JFK 16:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.