让我们找出的标杆。从脚本开始:
#!/usr/bin/python
for i in xrange(100000):
print "def foo%d(): pass\n" % i
它生成一个大的Python程序。我们将它保存到foo.py
。
计划import.py
只是做一个import foo
,(四个重复):
# 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
第一次,它包含了结果后折痕文件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
和from foo import foo1
之间没有显着的性能差异。
正如其他人已经指出的那样,这是因为Python需要解析/运行整个文件,即使其中只有一小部分被调用者实际使用。
1.导入从不会对“复杂性”产生任何影响。我认为你错误地使用了“时间复杂度”这个短语。如果您询问“运行时间”,可能会产生微观影响。 2.不要优化进口,争取清晰和意义。 – 2011-02-12 13:12:58