Python控制台未显示函数的输出

时间:2018-08-26 11:02:52

标签: python console

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))

对于这些功能,这不是问题,因为我知道它们的工作原理。但这使您很难使用功能并了解它们的工作原理,因为您永远看不到输出。

有人可以向我解释为什么该控制台如此工作以及如何更改吗?

1 个答案:

答案 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]