【问题标题】:Python Jupyter Notebook: Specify cell execution orderPython Jupyter Notebook:指定单元格执行顺序
【发布时间】:2016-11-19 16:44:05
【问题描述】:

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

所以我的问题是,有没有办法在我点击全部运行后控制单元格的运行顺序?或者有没有办法我可以做如下的事情。 我将所有函数定义放在单元格 20 中,然后在单元格 1 中,我可以告诉 Jupyter 类似“运行单元格 20”的内容。

只是好奇这是否可行。 谢谢。

【问题讨论】:

  • 有一个名为init_cell 的扩展,它在工具栏中添加一个按钮,并在笔记本重新启动时“初始化”或运行特定单元格。如果尚未安装,则需要安装 nbextensions 并通过 View > Cell Toolbar > Initialisation Cell menu 指示特定的单元格。
  • 我亲自运行了两次笔记本来解决您遇到的问题(使用 if 在第二次迭代中只运行第一个单元格)。
  • @pistache 实际上我会每天运行笔记本。所以我想使用 nbconvert 自动化它。
  • 我们是 working on 机制来隐藏来自 nbconvert 输出的代码单元。
  • 仅供参考,您要问的是 Jupyter 中的文学编程。这也是我想要的……

标签: python jupyter-notebook jupyter


【解决方案1】:

我会将函数保存为单独的模块,然后在开头导入此模块。

【讨论】:

    【解决方案2】:

    这种功能(据我所知)在 Jupyter 中尚不可用。但是,如果您真的担心一开始有很多函数定义并想要隐藏它们,您可以执行以下替代方案:

    1. 在 Python 脚本中定义函数。
    2. 将脚本执行添加到笔记本的第一个编码单元
    3. 将剩余的代码添加到笔记本的连续单元格中
    4. (可选)在笔记本末尾显示其内容以方便查看。

    【讨论】:

    • 当您说“尚未”时,您的意思是它们将包含在未来的版本中吗?还是在“jupyterlab”中?是的,作为模块导入听起来是我现在能做的最好的事情。
    • 因为this thoughtful article on literate programming and code presentation order,我来这里是为了寻找一种将序言放在末尾的方法。我喜欢这个答案,因为它大部分将细节放在一边,然后考虑在之后显示它们。非常好的解决方法!
    【解决方案3】:

    查看execution_dependencies nbextension。这样,您就可以定义对单元执行顺序的依赖关系。

    要在单元格上使用标签: 视图 - 单元格工具栏 - 标签

    例如:

    给你的单元格添加标签

    单元格 1 - #HTML,=>函数

    print(txt)
    

    ...

    单元 20 - #functions

    txt = 'functions'
    

    当你运行 Cell 1 时,它会输出“functions”,因为它会先运行 cell 20。

    【讨论】:

    • 这就是我要找的!谢谢:)
    【解决方案4】:

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

    【讨论】:

      最近更新 更多