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

问题描述 投票:0回答:5

我正在读这本书,

Python Machine Learning
,并尝试分析代码。但它只提供
*.ipynb
文件,这让我很麻烦。

例如,

在这段代码中,我不想运行整个

In[9]
,而是想逐行运行,以便我可以检查变量的每个值并了解每个库函数的作用。

每次执行部分代码都需要注释吗?我只想要像

Execute the block part
中那样的
MATLAB

之类的东西

而且,假设我注释了代码的某些部分并逐行执行。如何在不使用

print()
display()
的情况下检查每个变量的值?如您所知,我不必使用
print()
来检查终端中
python interactive shell
中的值。
Jupyter
有类似的方法吗?

python ipython jupyter-notebook jupyter
5个回答
20
投票

ast_node_interactivity

在 Jupyter Notebook 或 IPython 控制台中,您可以使用

ast_node_interactivity
配置此行为:

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

示例

使用此配置,每一行都会打印得很漂亮,即使它们位于同一个单元格中。

  • 在笔记本中:

  • 在 IPython 控制台中:

注释

  • None
    不显示。

  • 还有许多其他有用的提示这里(“28 个 Jupyter Notebook 提示、技巧和快捷方式 - Dataquest”)。


4
投票

您只需添加新单元格,然后将所需的部分剪切并粘贴到新单元格中即可。因此,例如,您可以将导入和

%matplotlib inline
放入第一个单元格中(因为它们只需要在笔记本首次打开时运行),将
y
生成放入第二个单元格中,将
X
生成放入第三个,以及第四个的情节。然后您可以依次运行每个单元格。这只是一个示例,您可以根据需要将其拆分(尽管我确实建议在一开始就将导入放在一起)。

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

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

然后

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

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

然后

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

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

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

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

3
投票

在 PyCharm Jupyter Notebooks 中,您只需右键单击并拆分单元格,完成后右键单击合并。


0
投票

我认为你可以打印行之间的变量。这是最简单的方法


0
投票

上面有正确的答案,但它实际上不是官方的“答案”。它在第一次发布后的第一条评论中,内容如下:

You can quickly split that cell 
into multiple cells by putting your  
cursor at the desired location to split at, 
and press CTRL+SHIFT+- – AGS
Jul 14, 2016 at 0:48  

这是常规使用的最佳正确答案。在编程时,您可以通过在断点处“拆分单元格”来插入中断。 “拆分单元格”选项位于“编辑”选项卡(菜单)下。

© www.soinside.com 2019 - 2024. All rights reserved.