Matplotlib 怪异的iPython笔记本图形大小行为

Matplotlib 怪异的iPython笔记本图形大小行为,matplotlib,plot,ipython-notebook,figure,Matplotlib,Plot,Ipython Notebook,Figure,我在iPython笔记本上看到一个奇怪的效果,我不明白。如果我将以下代码放在一个单元格中并运行两次,两次图形都将使用我的自定义图形大小规格绘制 %matplotlib inline import matplotlib matplotlib.rcParams['figure.figsize'] = (8,6) import matplotlib.pyplot as plt plt.plot([0,1],[1,2]) 现在,如果我创建一个名为set\u figsize.py的文件,其中包含以下行:

我在iPython笔记本上看到一个奇怪的效果,我不明白。如果我将以下代码放在一个单元格中并运行两次,两次图形都将使用我的自定义图形大小规格绘制

%matplotlib inline
import matplotlib
matplotlib.rcParams['figure.figsize'] = (8,6)
import matplotlib.pyplot as plt
plt.plot([0,1],[1,2])
现在,如果我创建一个名为
set\u figsize.py
的文件,其中包含以下行:

import matplotlib
matplotlib.rcParams['figure.figsize'] = (8.0, 6.0)
并在单个单元格中启动一个新笔记本,其中包含以下内容:

%matplotlib inline
import set_figsize
import matplotlib.pyplot as plt
plt.plot([0,1],[1,2])

然后运行两次,第一次使用我的自定义地物大小打印地物,第二次返回到较小的默认大小。如果我将
%matplotlib inline
放置在单个单元格中并只运行一次,则我的自定义地物大小将保持不变。因此,似乎每次运行
%matplotlib inline
时,图形大小都设置为默认值,但运行
import set\u figsize
仅在第一次运行时生效。为什么会发生这种情况?

模块的代码只有在第一次导入时才实际运行。这对于防止函数和类等的双重定义以及允许循环导入(当两个模块都相互导入时)是必要的

当您第二次导入set\u figsize时,Python检查
sys.modules
,发现已经有一个名为
set\u figsize
的模块对象导入,所以它只使用该对象。它不会再次运行该文件

因此,在大多数情况下,最好只将定义放在模块中。不要放入带有副作用的语句,这些副作用是您希望在导入模块时运行的。如果您想编写一个Python脚本,可以从命令行(
Python script.py
)执行该脚本,那么将所有不是定义或导入的内容都放在
下,如果
块中的名称