下面的代码片段中的函数应该创建一个简单的matplotlib图并返回它。
import matplotlib.pyplot as plt
import numpy as np
def random_figure():
fig, axes = plt.subplots(2, 1, squeeze=True)
for ax in axes:
ax.plot(*np.random.rand(10, 2))
return fig我不明白的是,画出来的数字比预期的要多:
my_fig = random_figure()存储返回值,它仍然是绘制的.random_figure(),它会显示两次:

这是我不知道的matplotlib中的一个设置吗?
我在vscode中使用jupyter笔记本,如果相关的话。
PS,我的期望是它的行为像函数
def random_number():
return np.random.rand()当返回值与my_num = random_number()一起存储时,它将不输出任何内容。
发布于 2022-06-24 20:46:45
您正在观察它打印两次,因为REPL设计的最后参考项目的每个木星单元,见前两句here。在木星中,这限制了它只展示了一次:
import matplotlib.pyplot as plt
import numpy as np
def random_figure():
fig, axes = plt.subplots(2, 1, squeeze=True)
for ax in axes:
ax.plot(*np.random.rand(10, 2))
return fig
random_figure();请记住,单元格的结尾是特殊的,因为它的REPL设计。这就是为什么您可以在单元格的最后一行上放置一个变量,并在不需要print(my_variable)的情况下获得值。
上面的代码块可以工作,因为单元格最后看到的东西是;,它什么也不返回。
有了你所拥有的,它返回了情节,所以它在制作之后再次显示出来。
使用my_fig = random_figure(),您不会看到它两次,因为random_figure()返回的内容会被赋值所消耗。
添加;的诀窍通常用于抑制地块的对象代码(类似于<Figure size 432x288 with 0 Axes>'的东西),有时更多的是在输出区域中除了显示绘图之外,还会出现更多的东西,参见example here,特别是Kynan解释其工作原因的评论here。
https://stackoverflow.com/questions/72747433
复制相似问题