[英]Why does Jupyter notebook NOT execute all the lines of code? (iPython)
[英]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.