2016-11-19 52 views
4

我有一个Jupyter笔记本。 在单元格1中,我定义了许多函数,它们需要在其他函数之前运行。然后在下面的单元格中,我开始呈现结果。 但是,当我转换为HTML时,这种布局很难看。读者不得不滚动很长时间才能看到结果,他们可能根本不关心这些功能。 但我必须按照这个顺序放置代码,因为我需要这些功能。Python Jupyter笔记本:指定单元格执行顺序

所以我的问题是,有没有一种方法可以控制单元格运行顺序后,我点击运行所有?或者有什么办法可以做到以下几点。 我把我所有的函数定义放在单元格20中,然后在单元格1中,我可以告诉Jupyter类似“运行单元20”。

只是好奇,如果这是可行的。 谢谢。

+0

有一个名为['init_cell']的扩展(https://github.com/ipython-contrib/jupyter_contrib_nbextensions/tree/master/src/jupyter_contrib_nbextensions/nbextensions/init_cell),它向工具栏添加一个按钮并“初始化“或者在笔记本重新启动时运行特定单元。这需要安装nbextensions(如果尚未安装),并通过View> Cell Toolbar> Initialisation Cell菜单指示特定的单元格。 – pylang

+0

我亲自运行笔记本两次来解决您的问题(使用'if'仅在第二次迭代中运行第一个单元格)。 – pistache

+0

@pistache其实我会每天运行笔记本。所以我想用nbconvert自动化它。 – JOHN

回答

3

这样的功能(就我所知)在Jupyter中尚不可用。但是,如果您真的担心在开始时有很多函数定义并希望隐藏它们,则可以执行以下操作:

  1. 在Python脚本中定义函数。
  2. 脚本执行在笔记本观众方便的末尾添加到您的笔记本
  3. 的第一编码单元代码的剩余添加到笔记本
  4. 可选的连续单元,显示其内容。
+0

当你说“尚未”时,你的意思是他们将包含在未来的版本中?或在“jupyterlab”?是的,作为模块导入听起来像是我现在可以做的最好的事情。 – JOHN

+0

我来到这里寻找一种方法,使序言被放置在最后,因为[关于文学编程和代码演示顺序的这篇深思熟虑的文章](https://getpocket.com/a/read/730903290)。我喜欢这个答案,因为它大大提高了细节的准确性,但是之后会考虑显示它们。非常好的解决方法! – mike

4

我会将函数另存为一个单独的模块,然后在开始时导入此模块。

0

考虑使用Runtools nbextension,它允许您运行选定的单元格。