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

python是否导入所有列出的库?,python,import,libraries,pep8,Python,Import,Libraries,Pep8,我只是想知道,我经常有很长的python文件,而导入往往会很快堆叠起来 PEP8说导入应该总是写在文件的开头 调用文件中编码的函数时是否导入了所有导入的库?还是只调用必要的库 担心这个有意义吗?是否没有理由在需要库的函数或类中导入库 担心有意义吗 这个 没有 没有理由在需要库的函数或类中导入库。 这很慢,因为import语句必须检查它是否被导入过一次,并意识到它已经被导入 如果将其放入经常调用的函数中,则可能会浪费一些时间进行所有导入检查。导入发生在包含导入的模块被执行或导入时,而不是在调用函

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

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



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

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

担心有意义吗 这个

没有

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


如果将其放入经常调用的函数中,则可能会浪费一些时间进行所有
导入检查。

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

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


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

每次Python点击import语句时,它都会检查该模块是否已经导入,如果没有,则导入它。因此,当您的文件被其他模块运行或导入时,文件顶部的导入就会发生


这其中有一些原因,因此通常最好将导入保持在文件的顶部,以便预先考虑成本。

导入的最佳位置是文件的顶部。将依赖项记录在一个位置,并使不存在依赖项的错误更早出现。导入本身实际上发生在
import
语句时,但这很少有什么关系


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

如果模块内的某个函数是唯一一个导入给定其他模块的函数(假设您有一个发送tweet的函数,仅当某些配置选项处于启用状态时),那么在该函数中导入该特定模块是有意义的


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

“调用文件中编码的函数时是否导入了所有导入的库?”导入是通过
import
语句完成的。这个问题没有任何意义。不准确。导入是在执行
import
语句时发生的,无论它位于何处。我已更正。我知道,但没有正确地表达出来。谢谢。仅仅因为函数是唯一需要给定依赖项的函数,这并不意味着它自己导入它是有意义的。在文件顶部导入具有记录依赖项、能够在附加代码中使用模块以及符合其他程序员期望的优点。在函数中导入实际上有两个潜在的目的:可选的依赖项,这是一种极端情况(通常实现时需要更多的依赖项),以及在需要之前推掉第一次导入模块的任意成本,这更是一种极端情况。@Callahad:很公平,至少你给出了一些数据!但这意味着什么?“空”导入所需时间是调用
string.lower
所需时间的两倍。这就是我所说的可以忽略不计的。成本可以加起来。如果“可忽略”是O(n**2)循环的一部分,那么您将看到严重的性能下降;和
matplotlib
,仅当我想在交互式会话中显示绘图时才使用。只有在我需要时才打印“加载matplotlib”
和导入matplotlib,而不是在模块开始时(这让用户觉得每次使用此自适应打印模块时脚本都会挂起)。@Seth Johnson,在函数中导入的一个有效原因是,在需要之前,将昂贵的首次导入成本推高。(我在另一篇评论中注意到了这一点。)这种技术很少有帮助,尽管有时会有帮助。在许多应用程序中,预先支付可能不必要的成本最终会使应用程序更具响应性,但当每次需要启动流程时,可能会产生相反的效果。那么web应用程序呢,其中每个请求都加载了库?@RadiantHex,这个用例对我来说并不是特别有吸引力。也许我不明白你在做什么。