2024-03-29 02:36:53 发布
网友
我有一个有很多功能的模块:
模块一
def a(): ... def b(): ... def c(): ....
现在,从另一个模块中,我只需要导入函数b。为此,我使用以下语法:
我的问题-除了名称空间的考虑之外,如果我使用上面所述的导入而不是import One,是否会对程序的时间复杂性产生任何积极的影响,因为这样我只导入了必要的函数(为了这个例子,我只在module One中使用了3个函数,但是我还有更多的函数)
import One
module One
必须加载完整的模块,想象一下:
b = 1 def a(): return b
现在在我们的第二个文件中:
哦哦
让我们通过基准测试找出答案。从脚本开始:
#!/usr/bin/python for i in xrange(100000): print "def foo%d(): pass\n" % i
生成一个大型Python程序。我们将其保存到foo.py。在
foo.py
程序import.py只执行import foo(四次重复):
import.py
import foo
第二次(以及后续的)执行速度更快,因为Python在第一次导入foo之后对一个文件foo.pyc进行折痕处理,该文件包含解析foo.py的结果。这将加速模块的所有后续导入。在
foo
foo.pyc
程序fromimport.py执行from foo import foo1(四次重复):
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需要解析/运行整个文件,即使调用者实际上只使用了其中的一小部分。在
不。完整的模块必须完全运行(第一次),以确保名称甚至会存在于其中。在
必须加载完整的模块,想象一下:
现在在我们的第二个文件中:
^{pr2}$哦哦
让我们通过基准测试找出答案。从脚本开始:
生成一个大型Python程序。我们将其保存到
foo.py
。在程序
^{pr2}$import.py
只执行import foo
(四次重复):第二次(以及后续的)执行速度更快,因为Python在第一次导入
foo
之后对一个文件foo.pyc
进行折痕处理,该文件包含解析foo.py
的结果。这将加速模块的所有后续导入。在程序
fromimport.py
执行from foo import foo1
(四次重复):这些时间与前一个程序非常相似(同样,第一次比较慢,因为Python需要解析}之间没有显著的性能差异。在
foo.py
),它确认了其他答案的陈述,即在常见场景中,import foo
和{正如其他人所指出的,这是因为Python需要解析/运行整个文件,即使调用者实际上只使用了其中的一小部分。在
不。完整的模块必须完全运行(第一次),以确保名称甚至会存在于其中。在
相关问题 更多 >
编程相关推荐