在IPython笔记本中,我在单元格中输入了这段代码:
from IPython.display import HTML
HTML("""<div>One</div>""")
HTML("""<div>Two</div>""")
为什么输出单元格只包含第二个div?
EDIT。 @Dunno已经展示了如何将所有html放入一个HTML()
并且两个元素都被渲染,但我仍然不明白发生了什么。这是一个更一般的案例:
当我在输入单元格中输入它时:
1
2
3
输出
3
但如果我输入以下内容:
print 1
print 2
print 3
然后我得到了这个输出:
1
2
3
有什么区别?当我不使用print
语句时,IPython笔记本仅评估最后一个语句吗?或者每个后续评估都会覆盖前一个评估?
答案 0 :(得分:6)
是的,我发现了一些documentation,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
修改强>
I opened a ticket在ipython的github配置文件中查看它是否是一个只显示最后一行语句的错误或功能。事实证明,这是计划行为:
引用Thomas Kluyver:
这是故意的,因为如果你在for循环中调用返回值的东西:
for line in lines: f.write(line) # Returns number of bytes written
您可能不希望在输出中看到所有这些数字。
IPython中的规则是:如果代码中的最后一个语句是表达式,我们将显示其&gt;值。 1; 2是一对语句,而1,2是一个语句,因此两个值都将>显示。
我希望稍微解释一下。我们很高兴重新审视这样的决定,但多年来一直都是这样,我认为没有人对它有任何疑问。
答案 1 :(得分:2)