如何在jupyter-notebook中逐行执行代码?

use*_*632 22 python ipython ipython-notebook jupyter jupyter-notebook

我正在读这本书,Python Machine Learning并试图分析代码.但它只提供*.ipynb文件,这让我非常麻烦.

例如,

在此输入图像描述

在这段代码中,我不想运行整个In[9]但是想逐行运行,以便我可以检查变量的每个值并知道每个库函数的作用.

每次我想执行部分代码时,是否必须发表评论?我只是想类似Execute the block partMATLAB

而且,让我说我评论代码的某些部分并逐行执行.如何在不使用print()或检查每个变量的值的情况下进行检查display()?如您所知,我不必使用print()检查python interactive shell终端中的值.是否有类似的方式Jupyter

Eri*_*nil 12

ast_node_interactivity

在Jupyter Notebook或IPython控制台中,您可以使用以下命令配置此行为ast_node_interactivity:

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
Run Code Online (Sandbox Code Playgroud)

例子

使用此配置,即使它们位于同一单元格中,每条线也都会被打印出来.

  • 在笔记本中:

Jupyter笔记本多行

  • 在IPython控制台中:

IPython控制台多行

笔记

  • None 没有显示.

  • 还有其他许多有用的技巧在这里("28个Jupyter笔记本技巧,窍门和捷径- Dataquest公司").


The*_*Cat 4

您只需添加新单元格,然后将所需的部分剪切并粘贴到新单元格中即可。因此,例如,您可以将导入和放在%matplotlib inline第一个单元格中(因为它们只需要在笔记本第一次打开时运行),将生成放在y第二个单元格中,将X生成放在第三个单元格中,将绘图放在第四个单元格中。然后您可以依次运行每个单元格。这只是一个示例,您可以根据需要将其拆分(尽管我确实建议在一开始就将导入放在一起)。

至于打印,如果单元格中的最后一行未分配给变量,则会自动打印。例如,假设以下是一个单元格:

y = df.iloc[0:100, 4].values
y = np.where(y == 'spam', -1, 1)
y
Run Code Online (Sandbox Code Playgroud)

然后 的内容y将显示在单元格后面。同样,如果您有一个包含以下内容的单元格:

y = df.iloc[0:100, 4].values
y = np.where(y == 'spam', -1, 1)
y.sum()
Run Code Online (Sandbox Code Playgroud)

然后操作的结果y.sum()将显示在单元格后面。另一方面,如果执行以下单元格,则不会打印任何内容:

y = df.iloc[0:100, 4].values
y = np.where(y == 'spam', -1, 1)
Run Code Online (Sandbox Code Playgroud)

也没有为此打印任何内容:

z = {}
y = df.iloc[0:100, 4].values
z['spam'] = np.where(y == 'spam', -1, 1)
Run Code Online (Sandbox Code Playgroud)

  • 此解决方案的困难在于所有这些复制和粘贴都很麻烦(甚至在理解原始代码的行为后可能必须撤消)。许多编辑器允许执行选定的行,即使它们位于函数内部(但 Jupyter 目前还不允许):这要轻得多。 (4认同)