python - 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))
对于这些功能,这不是问题,因为我知道它们是如何工作的。但这使得玩弄函数和理解它们是如何工作的变得很困难,因为你永远看不到输出。
有人可以向我解释为什么这个控制台会这样工作以及我如何改变它?
解决方案
将它们转换为列表:
>>> 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]
推荐阅读
- html - Chrome:视口 320 创建水平滚动条并让您进一步向下滚动(响应式)
- eval - 在 SICP 的评估器(第 4 章)中如何标记原始过程?
- azure - 无法从 Azure 云 nifi 服务器中的 FTP 服务器获取数据或队列数据?
- ajax - 为什么这个基本的 ajax 调用给了我 400 而没有向控制器触发?
- rdf - Schema.org 创建者与作者属性
- java - Scala 伴侣与 Java 代码中的特征与抽象类
- intellij-idea - Lombok @RequiredArgsConstructor(onConstructor_ = {@MyAnnotation}) IntelliJ IDEA 编译错误
- python - 如何测试独立脚本文件
- c# - 在 C# 中创建 PowerShell 管道以读取异步
- gnuplot - gnuplot 将数据重定向到 here-doc