2

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

PEP8 说导入应该总是写在文件的开头。


调用文件中编码的函数时是否会导入所有导入的库?还是只调用必要的库?

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

4

5 回答 5

3

每次 Python 遇到 import 语句时,它都会检查该模块是否已经被导入,如果没有,则导入它。因此,只要您的文件运行或由另一个模块导入,文件顶部的导入就会发生。

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

于 2010-03-19T19:13:02.757 回答
2

导入的最佳位置是文件的顶部。这会在一个地方记录依赖关系,并使它们的缺失导致的错误更早出现。导入本身实际上是在import声明时发生的,但这并不重要。

除非您处于需要它的函数或方法中,否则您不会通过不导入库来获得任何收益,这种情况并不常见。(在类的主体中这样做永远不会有任何好处。)您很少需要可选依赖项,但更罕见的是,这是获取它们的正确技术。也许您可以分享一个引人注目的用例?

于 2010-03-19T19:14:47.860 回答
1

担心这个有意义吗?

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

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

于 2010-03-19T19:09:58.103 回答
0

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

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

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

于 2010-03-19T19:11:10.873 回答
0

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

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

于 2010-03-19T19:24:38.133 回答