2014-03-03 72 views
4

我写这将在一定在第一单元的IPython我会话的开始定期进口,但也会从其他非交互式会话进口.py文件,因为它包含导入时可以在非交互模式下批量运行的功能。最佳实践在IPython中

它基本上是含有许多类和函数,是很常见的模块。

由于我在--pylab=inline选项中使用IPython,所以numpy和matplotlib函数已经被导入,但是当批量运行时使用简单的python mymodule.py,numpy函数必须特别导入。

在结束IPython的会议期间,我会拿出两倍的进口,一件事我不很喜欢。

这种情况下的最佳做法是什么?不是两次导入模块是一种不好的做法?

+0

”是不是两次导入模块是一种不好的做法?“ - 你为什么这么说? – user2357112

+0

这不是一种记忆浪费吗?我来自C++的地方进行导入头两次导致讨厌的编译器错误,所以#编译的和的#ifndef的 – linello

+0

号您可以导入模块200次循环或具有进口A A导入B,和Python仍然将只执行每模块的代码一次。 (圆形进口例如可能会导致一些其他问题,虽然。) – user2357112

回答

4

反复进口都不是问题。无论在程序中导入模块的次数多少,Python只会运行一次代码,只能生成模块的一个副本。第一个之后的所有导入只会引用已经加载的模块对象。如果你来自C++背景,你可以想象这些模块都隐含着包含警卫。 “

+0

+1的隐含包括警卫 – linello

+0

信息在编写程序包,什么是进口的基础文件夹'__init.py'时明确进口的行为?是不是其他'.py'文件在'__init__'中共享导入? – linello

+1

@linello:否。导入会为整个解释器加载模块,但它只会使单个文件的名称可用。例如,如果'foo.py'没有'import bar',这只会将'bar'模块分配给模块'foo'中的'bar'变量。每个需要使用模块的文件都需要分别导入它。 – user2357112