2015-11-20 50 views
1

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

%matplotlib inline 
import matplotlib 
matplotlib.rcParams['figure.figsize'] = (8,6) 
import matplotlib.pyplot as plt 
plt.plot([0,1],[1,2]) 

现在,如果我创建一个名为set_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_figsize仅在我第一次运行它时生效。为什么会发生?

回答

2

模块的代码实际上只是运行它第一次被导入。这对防止函数和类等的双重定义是必要的,并且允许循环导入(当两个模块都相互导入时)。

当你import set_figsize第二次,Python的检查中sys.modules并看到已经有一个名字set_figsize下进口模块对象,所以它只是使用该对象。它不会再运行该文件。

因此,在大多数情况下,您应该只将定义置于模块中,这是一个很好的规则。不要在模块导入时输入您希望运行的副作用语句。如果您想编写一个Python 脚本,您可以从命令行(python script.py)执行一个脚本,将所有非定义或导入的内容放在if __name__ == '__main__':块之下。

+0

很高兴知道,谢谢! –