在IPython中导入时的最佳做法

在IPython中导入时的最佳做法,python,numpy,module,matplotlib,ipython,Python,Numpy,Module,Matplotlib,Ipython,我正在编写一个.py文件,它将在第一个单元格中的某些IPython会话开始时定期导入,但也将从其他非交互式会话导入,因为它包含可以在非交互式模式下批量运行的函数 它基本上是一个包含许多非常常见的类和函数的模块 由于我将IPython与--pylab=inline选项一起使用,numpy和matplotlib函数已经被导入,但是当使用简单的python mymodule.py批量运行时,必须专门导入numpy函数 最后,我在IPython会议期间提出了双重导入,这是一件我不太喜欢的事情 在这种情况

我正在编写一个.py文件,它将在第一个单元格中的某些IPython会话开始时定期导入,但也将从其他非交互式会话导入,因为它包含可以在非交互式模式下批量运行的函数

它基本上是一个包含许多非常常见的类和函数的模块

由于我将IPython与
--pylab=inline
选项一起使用,numpy和matplotlib函数已经被导入,但是当使用简单的
python mymodule.py
批量运行时,必须专门导入numpy函数

最后,我在IPython会议期间提出了双重导入,这是一件我不太喜欢的事情


在这种情况下,最佳做法是什么?两次导入模块不是一种糟糕的做法吗?

重复导入不是问题。无论一个模块在一个程序中导入多少次,Python只会运行一次代码,并且只复制一个模块。第一个之后的所有导入将仅引用已加载的模块对象。如果你来自C++背景,你可以想象模块都有隐式的包含保护。

“不是把模块导入两次是一个坏的实践吗?”——为什么这么说?难道这不是内存浪费吗?我来自C++,其中导入标题两次导致严重的编译器错误,因此,γ-PrimaM'和αiIFNDEF'sNO。您可以在一个循环中导入一个模块200次,或者有一个导入a的导入B,Python仍然只执行每个模块的代码一次。(不过,循环导入示例可能会导致一些其他问题。)在编写包时,从基本文件夹
\uu init.py
显式导入时,导入的行为是什么?其他“.py”文件是否共享
\uuuu init\uuuu
中的导入?@linello:否。导入会为整个解释器加载模块,但它仅使名称可用于单个文件。例如,如果
foo.py
导入了
bar
,则这只会将
bar
模块分配给模块
foo
中的
bar
变量。每个需要使用模块的文件都需要单独导入。感谢这些宝贵的信息,它解决了我的一些困惑:)