a=b=range(3)
In[1] = zip(a,b)
我希望看到这样的东西:
out[1] =
[(0 0),
(1 1),
(2 2)]
但是,我得到的输出是:
out[1] = <zip at 0x26da8d2e9c8>
对于其他功能也是如此。
range(20)
out = range(0,20))
对于这些功能,这不是问题,因为我知道它们的工作原理。但这使您很难使用功能并了解它们的工作原理,因为您永远看不到输出。
有人可以向我解释为什么该控制台如此工作以及如何更改吗?
答案 0 :(得分:1)
将它们转换为列表:
>>> list(zip(a,b))
[(0, 0), (1, 1), (2, 2)]
您需要执行此操作的原因是,zip()
返回了迭代器(可以调用next()
的东西),而range()
返回了可迭代(您可以致电iter()
)。不需要对它们都进行评估(在这种意义上它们是“懒惰的”),因此它们在分配给变量时不会显示其所有内容。
但是,当您将它们转换为列表时,会对其进行迭代和评估,以便您查看其内容。
在创建自己的Iterable或Iterator时,也是如此:
class my_iterator():
def __init__(self):
self.x = 0
def __iter__(self):
return self
def __next__(self):
self.x += 1
if self.x < 10: return self.x
raise StopIteration
其执行方式与zip
实例非常相似:
>>> i
<__main__.my_iterator object at 0x7f219d303518>
>>> list(i)
[1, 2, 3, 4, 5, 6, 7, 8, 9]