这是什么意思<_拜特西奥对象位于0x000002244592F1A8>?

2024-10-03 19:33:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个网址:

https://enterpriseefiling.fcc.gov/dataentry/api/download/dbfile/Current_LMS_Dump.zip

^{pr2}$

我在python解释器中运行以下代码

import requests, io
r = requests.get(u1, stream=True)
io.BytesIO(r.content)

我得到以下回应

<_io.BytesIO object at 0x000002244592F1A8>

我的问题是:这是什么意思?0x0000022445921a8在哪里?0x000002244592F1A8是什么意思?在


Tags: httpsioapidownloadcurrentrequestsdumpdbfile
3条回答

我的理解是0x000002244592F1A8这是内存中对象的格式化的^{}。我说“格式化”是因为,如果在同一个对象上执行id(),那么表示将有点不同(它将被格式化为intlong而不是指针地址:

In [1]: import io

In [2]: obj = io.BytesIO()

In [3]: obj
Out[3]: <_io.BytesIO at 0x10da1ca70>

In [4]: id(obj)
Out[4]: 4523674224

要将id()转换为您看到的格式,可以执行如下操作(从this post中窃取):

^{pr2}$

这个^^不是特别有用,但它只是向您展示了id()如何与您所看到的一致。在

您看到它的原因只是它显示为BytesIO对象的默认__repr__()的一部分。在

当python需要打印一个对象,而该对象没有一个内置方法来告诉解释器如何打印它(例如,requests.Response和python的内置list和{}类型do有这种类型的指令),python使用以下格式:

<[objecttype] object at [pointer]>

其中pointer实际上是指向对象在内存中位置的指针。这就是您在这里看到的:当您在解释器中执行io.BytesIO(r.content)操作时,您将创建一个io.BytesIO对象。在

在解释器上,当您使用解释器时,往往会调用另一个方法

^{pr2}$

而不仅仅是

>>> <object>

而且io.BytesIO类当然有一些方法可以用于更有用的输出,如果您查看它的文档的话。尝试将其分配给变量而不是打印:

b = io.BytesIO(r.content)

What does 0x000002244592F1A8 refer to?

它指的是对象的身份。这个数字是一个实现细节(在CPython中,它恰好是内存中对象的地址,id内置函数返回的数字相同),但是您可以相信的是,对于进程中当前存在的每个BytesIO对象,这个数字都是不同的。在

这类信息包含在许多对象的__repr__中,因为它在调试时非常有用,允许用户区分可能具有相同内容的不同对象。在

相关问题 更多 >