首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python导入的效率

问Python导入的效率
EN

Stack Overflow用户
提问于 2011-02-12 09:10:25
回答 3查看 562关注 0票数 2

我有一个具有许多功能的模块:

模块1

代码语言:javascript
复制
def a():
 ...
def b():
 ...
def c():
 ....

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

代码语言:javascript
复制
from One import b

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-12 09:24:52

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

代码语言:javascript
复制
#!/usr/bin/python
for i in xrange(100000):
    print "def foo%d(): pass\n" % i

生成一个大型Python程序。我们把它保存到foo.py。

程序import.py只执行一个import foo,(四个重复):

代码语言:javascript
复制
# time python import.py

7.83s user 0.55s system 99% cpu 8.381 total
1.52s user 0.11s system 99% cpu 1.630 total
1.54s user 0.09s system 100% cpu 1.626 total
1.48s user 0.15s system 100% cpu 1.623 total

第二次(以及随后的)执行速度更快,因为Python在第一次导入foo.pyc (其中包含解析foo.py的结果)之后会增加文件foo.py。这将加速模块的所有后续导入。

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

代码语言:javascript
复制
# 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和from foo import foo1在常见场景中没有显著的性能差异。

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

票数 5
EN

Stack Overflow用户

发布于 2011-02-12 09:14:34

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

票数 6
EN

Stack Overflow用户

发布于 2011-02-12 09:17:12

必须加载整个模块,设想如下:

代码语言:javascript
复制
b = 1
def a():
    return b

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

代码语言:javascript
复制
from somemodule import a

print a()    

啊哦

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4977268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档