首页 > 解决方案 > Python 控制台不显示函数的输出

问题描述

a=b=range(3)
In[1] = zip(a,b)

我希望看到这样的事情:

out[1] = 
[(0 0), 
 (1 1),
 (2 2)]

但是,我得到的输出是:

 out[1] = <zip at 0x26da8d2e9c8>

其他功能同理,fi

range(20)

out = range(0,20))

对于这些功能,这不是问题,因为我知道它们是如何工作的。但这使得玩弄函数和理解它们是如何工作的变得很困难,因为你永远看不到输出。

有人可以向我解释为什么这个控制台会这样工作以及我如何改变它?

标签: pythonconsole

解决方案


将它们转换为列表:

>>> list(zip(a,b))
[(0, 0), (1, 1), (2, 2)]

您需要这样做的原因是因为zip()返回一个迭代器(您可以调用next()的东西)并range()返回一个可迭代的(您可以调用iter()的东西)。两者都没有在需要之前进行评估(在这个意义上它们是“懒惰的”),因此它们在分配给变量时不会显示它们的所有内容。

但是,当您将它们转换为列表时,它们会被迭代和评估,以便您可以看到它们的内容。


当您创建自己的可迭代或迭代器时也是如此:

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]

推荐阅读