繁体   English   中英

为什么IPython笔记本只从这段代码中输出一个DIV?

[英]Why does IPython notebook only output one DIV from this code?

在IPython笔记本中,我在单元格中输入以下代码:

from IPython.display import HTML
HTML("""<div>One</div>""")
HTML("""<div>Two</div>""")

为什么输出单元只包含第二个div?

编辑。 @Dunno已经展示了如何将所有html放入一个HTML()并且两个元素都被渲染,但我仍然不明白发生了什么。 这是一个更一般的情况:

当我在输入单元格中输入它时:

1
2
3

输出是

3

但如果我输入以下内容:

print 1
print 2
print 3

然后我得到这个输出:

1
2
3

有什么不同? 当我不使用print语句时,IPython笔记本只评估最后一个语句吗? 或者每个后续评估都会覆盖前一个评估?

是的,我发现了一些关于此的文档HTML实际上是一个类,而不是一个函数。

所以正确的代码就是

from IPython.display import HTML
myhtml = HTML("""<div>One</div><div>Two</div>""") #make the html object
myhtml #display it

现在,为什么你的代码只显示一个div是有道理的。

要显示多个部分,请创建多个变量,包含html,然后在一次HTML调用中将它们连接起来。

div1 = """<div>One</div>"""
div2 = """<div>Two</div>"""
myhtml = HTML(div1 + div2)
myhtml

编辑:

在ipython的github配置文件上打开了一张票 ,看看它是一个错误还是一个只显示最后一行语句的功能。 事实证明,这是计划行为:

引用Thomas Kluyver的话:

这是故意的,因为如果你在for循环中调用返回值的东西:

 for line in lines: f.write(line) # Returns number of bytes written 

您可能不希望在输出中看到所有这些数字。

IPython中的规则是:如果代码中的最后一个语句是表达式,我们将显示其>值。 1; 2是一对语句,而1,2是一个语句,因此两个值都将>显示。

我希望能够解释一下。 我们很高兴重新审视这样的决定,但多年来一直都是这样,而且我认为没有人对它提出过任何问题。

只是IPython.display.DisplayObject答案的一小部分:如果你想从一个单元格中显示多个IPython.display.DisplayObject对象(包括HTML对象,还有图像等),你可以使用IPython.display.display函数。

例如,你可以这样做:

from IPython.display import HTML, Image, display
display(HTML("""<div>One</div>"""))
display(HTML("""<div>Two</div>"""))
display(Image("http://cdn.sstatic.net/stackoverflow/company/img/logos/so/so-logo.png?v=9c558ec15d8a", format="png"))

输出上面的代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM