Python中导入的效率

2024-03-29 02:36:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有很多功能的模块:

模块一

def a():
 ...
def b():
 ...
def c():
 ....

现在,从另一个模块中,我只需要导入函数b。为此,我使用以下语法:

^{pr2}$

我的问题-除了名称空间的考虑之外,如果我使用上面所述的导入而不是import One,是否会对程序的时间复杂性产生任何积极的影响,因为这样我只导入了必要的函数(为了这个例子,我只在module One中使用了3个函数,但是我还有更多的函数)


Tags: 模块函数import程序功能名称def时间
3条回答

必须加载完整的模块,想象一下:

b = 1
def a():
    return b

现在在我们的第二个文件中:

^{pr2}$

哦哦

让我们通过基准测试找出答案。从脚本开始:

#!/usr/bin/python
for i in xrange(100000):
    print "def foo%d(): pass\n" % i

生成一个大型Python程序。我们将其保存到foo.py。在

程序import.py只执行import foo(四次重复):

^{pr2}$

第二次(以及后续的)执行速度更快,因为Python在第一次导入foo之后对一个文件foo.pyc进行折痕处理,该文件包含解析foo.py的结果。这将加速模块的所有后续导入。在

程序fromimport.py执行from foo import foo1(四次重复):

# time python fromimport.py

7.81s user 0.44s system 99% cpu 8.253 total
1.48s user 0.15s system 100% cpu 1.626 total
1.52s user 0.11s system 99% cpu 1.631 total
1.49s user 0.14s system 100% cpu 1.630 total

这些时间与前一个程序非常相似(同样,第一次比较慢,因为Python需要解析foo.py),它确认了其他答案的陈述,即在常见场景中,import foo和{}之间没有显著的性能差异。在

正如其他人所指出的,这是因为Python需要解析/运行整个文件,即使调用者实际上只使用了其中的一小部分。在

不。完整的模块必须完全运行(第一次),以确保名称甚至会存在于其中。在

相关问题 更多 >