即使我没有打印,jupyter 也会打印太多输出

Yoo*_*ach 6 python jupyter

最近,Jupyter(笔记本和实验室)开始打印任何内容,就好像我单独执行每一行一样。它过去打印执行的最后一行的输出,但现在它打印所有内容,如下所示。

在此输入图像描述

我可以通过执行例如 来抑制这种情况_ = axs[0].plot(~~~),但是在每行末尾添加分号并没有帮助。我已经重新安装了 Anaconda 但没有任何改变。

我在 MBP 2018 15" 上使用 macOS 10.14.6,在 MS Edge 87.0.664.47 上使用 Python 3.8(基本上是当前 Anaconda 安装的所有内容,无需任何额外安装)。

编辑:更准确地说,任何具有分配给变量 的返回值的代码行总是被打印。以前,只有当每一行是代码的最后一行时,才会“打印”每一行。无论使用什么软件包,例如 numpy 或 pandas,都会发生这种奇怪的行为: 在此输入图像描述

(仅供参考,可复制文本:

import numpy as np
import pandas as pd

def add_with_return(arr):
    arr += 1
    return arr

a = np.arange(10)
b = pd.DataFrame(dict(value=a))
a, b
add_with_return(a)
c = np.linspace(0, 1)
Run Code Online (Sandbox Code Playgroud)

编辑2

我使用的软件包版本

$ jupyter --version
jupyter core     : 4.6.3
jupyter-notebook : 6.1.4
qtconsole        : 4.7.7
ipython          : 7.19.0
ipykernel        : 5.3.4
jupyter client   : 6.1.7
jupyter lab      : 2.2.6
nbconvert        : 6.0.7
ipywidgets       : 7.5.1
nbformat         : 5.0.8
traitlets        : 5.0.5
Run Code Online (Sandbox Code Playgroud)

编辑3:

我想我终于找到了一个解决方法: 放在代码单元最后一行;的末尾

示例:在单元格末尾添加一条虚拟线None;以消除所有不需要的打印。

在此输入图像描述

;但是,一旦您有任何代码行在代码单元格的最后一行末尾没有,它就会再次打印所有内容(无论您是否;在其他行的末尾有)

我想听听是否有更好的解决方案。(谁会想一直加上分号......?)

Rut*_*art 5

在 IPython 中,有一个选项InteractiveShell.ast_node_interactivity可以设置为“all”、“last”、“last_expr”、“none”或“last_expr_or_assign”。默认设置是“last_expr”。在此处的IPython 文档中查找更多信息。

当我在 Jupyter 单元格中输入以下内容时,模仿您的情况。

InteractiveShell.ast_node_interactivity = 'all'
Run Code Online (Sandbox Code Playgroud)

您提供的代码:

import numpy as np
import pandas as pd

def add_with_return(arr):
    arr += 1
    return arr

a = np.arange(10)
b = pd.DataFrame(dict(value=a))
a, b
add_with_return(a)
c = np.linspace(0, 1)
Run Code Online (Sandbox Code Playgroud)

它给出以下输出:

(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),
    value
 0      0
 1      1
 2      2
 3      3
 4      4
 5      5
 6      6
 7      7
 8      8
 9      9)

 array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])
Run Code Online (Sandbox Code Playgroud)

最后使用以下命令将其恢复到之前的状态。

InteractiveShell.ast_node_interactivity = 'last_expr'     
Run Code Online (Sandbox Code Playgroud)


Pra*_*iel 1

如果放置在正确的级别,分号应该起作用。

确保;设置在多层的 最后一个顶层,例如fig, axes = plt.subplots(2);

然后,您可以;在生成不需要的输出的代码行末尾添加以将其静音。例如:ABC.plot(XYZ);

更新;即使我只放在最后一行,静音也有效。如果没有,那么问题就出在其他地方。

在此输入图像描述