我有一个网址:
https://enterpriseefiling.fcc.gov/dataentry/api/download/dbfile/Current_LMS_Dump.zip
让
u1 = ['https://enterpriseefiling.fcc.gov/dataentry/api/download/dbfile/Current_LMS_Dump.zip']
我在python解释器中运行以下代码
import requests, io
r = requests.get(u1, stream=True)
io.BytesIO(r.content)
我收到以下答复
<_io.BytesIO object at 0x000002244592F1A8>
我的问题是:这是什么意思? 0x000002244592F1A8在哪里? 0x000002244592F1A8指的是什么?
答案 0 :(得分:0)
当python需要打印出一个对象,并且该对象没有内置的方法来告诉解释器如何打印它时(例如,requests.Response
和python的内置list
和dict
类型 do 具有这种说明),python使用以下格式:
<[objecttype] object at [pointer]>
其中pointer
实际上是指向对象在内存中位置的指针。那就是您在这里看到的:在解释器中执行io.BytesIO(r.content)
时,您将创建一个io.BytesIO
对象。
在解释器上执行操作时,往往会调用另一种方法
>>> print(<object>)
不只是
>>> <object>
和io.BytesIO
类当然具有可以用于更有用的输出的方法(如果查看其文档)。尝试将其分配给变量,而不是打印它:
b = io.BytesIO(r.content)
答案 1 :(得分:0)
我的理解是,0x000002244592F1A8
是内存中对象的格式id
。我说“格式化”是因为,如果您在同一对象上执行id()
,表示形式将有所不同(它将被格式化为int
或long
而不是指针地址:
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窃取):
In [5]: format(id(obj), '#010x' if sys.maxsize.bit_length() <= 32 else '#18x')
Out[5]: ' 0x10da1ca70'
此^^并不是特别有用,但它仅向您显示id()
与您所看到的内容如何对齐。
看到它的原因仅仅是它显示为__repr__()
对象的默认BytesIO
的一部分。
答案 2 :(得分:0)
0x000002244592F1A8指的是什么?
它是指对象的 identity 。该数字是一个实现细节(在CPython中,它恰好是对象在内存中的地址,与id
内置函数返回的数字相同),但是您可以指望的是,每个数字都会有所不同BytesIO
个对象当前在该过程中存在。
这类信息包含在许多对象的__repr__
中,因为它在调试时会很有用,可以区分可能具有相同内容的不同对象。