python是否导入了所有列出的库?

时间:2010-03-19 19:01:44

标签: python import libraries pep8

我只是想知道,我经常有很长的python文件,导入往往很快就会堆叠。

PEP8表示应始终在文件的开头写入导入。


调用文件中编码的函数时,是否导入了所有导入的库?或者只调用必要的库?

担心这个有意义吗?是否没有理由在需要它们的函数或类中导入库?

5 个答案:

答案 0 :(得分:3)

每当Python命中一个import语句时,它都会检查该模块是否已经导入,如果没有,则导入它。因此,文件顶部的导入将在您的文件运行或由另一个模块导入时立即发生。

对此有一些overhead,因此通常最好将导入保留在文件的顶部,以便预先处理成本。

答案 1 :(得分:2)

导入的最佳位置位于文件的顶部。这会将依赖关系记录在一个地方,并且可以更早地出现错误。导入本身实际上发生在import语句时,但这很少发生。

在您处于需要它的函数或方法之前,通常不会导入任何内容。 (通过在类的主体内部这样做,从来没有任何好处。)很少有你想要可选的依赖项,甚至更罕见的是,这是获得它们的正确技术。也许你可以分享一个引人注目的用例?

答案 2 :(得分:1)

  

担心是否有意义   此?

没有

没有理由在需要它们的函数或类中导入库。 它只是很慢,因为import语句必须检查它是否已被导入一次,并意识到它已被导入。

如果你把它放在经常调用的函数中,你可以在所有import检查时浪费一些时间。

答案 3 :(得分:0)

当包含导入的模块被执行或导入时,而不是在调用函数时,会发生导入。

通常,我不担心。如果您遇到减速,您可能会查看您的问题是否与此相关。如果是,您可以检查您的模块是否可以分成更小的模块。

但如果所有文件都被同一个程序使用,那么你最终还是会导入所有文件。

答案 4 :(得分:0)

如果模块中的一个函数是唯一一个导入给定其他模块的函数(假设您有一个发送推文的函数,只有某些配置选项打开),那么在函数中导入该特定模块是有意义的。

除非我看到一些分析数据证明不是这样,否则我的猜测是函数中import语句的开销完全可以忽略不计