“嵌套”导入语句对 Python 性能的影响

tom*_*012 -1 python performance module

我有一个使用 twitter api 分布在 2 个文件中的程序。有一个文件专用于发送和读取推文,因此我已将“导入 twitter”行放入该文件中。第二个文件有一个导入语句来导入这个基于 twitter 的文件,并将从该文件调用“read”和“post”函数。

这是代码的要点:

文件一:

import file2
file2.post(some text)
Run Code Online (Sandbox Code Playgroud)

文件2:

import twitter
api = twitter.Api(...)
def post(text):    
    api.PostUpdate()
Run Code Online (Sandbox Code Playgroud)

这工作正常并且完全按照我的预期运行,但我不确定这是否是运行此程序的最有效的方式(从性能角度来看)。每次调用文件 2 时都会运行“import twitter”行并用重复的导入填满内存和时间吗?如果是这样,我会更好地这样做:

文件一:

import twitter
import file2
api = twitter.Api(...)
file2.post(some text, api)
Run Code Online (Sandbox Code Playgroud)

文件2:

def post(text, api):
    api.PostUpdate(text)
Run Code Online (Sandbox Code Playgroud)

api 对象在文件之间传递的位置。

谢谢

shu*_*e87 5

导入会缓存所有导入,因此对于多次导入,它们只会在第一次执行导入后访问缓存的版本。有关其工作原理的详细信息,请参阅https://docs.python.org/3/reference/import.html 。

一般来说,您应该围绕正确的模块概念创建导入结构,性能不应该成为此决定的一个重要因素,因为老实说,当您获得正确的导入结构时,不会有太大的性能差异。如果您使用文件中模块中的某些内容,则应该显式导入该模块。与此相关的是,确保您使用的每个模块都可以直接导入而不会出现错误,这将帮助您更好地设计模块并避免一类微妙的错误,在这些错误中,由于 importlib 中的缓存机制,更改导入顺序可能会导致错误。