我经常试图在需要它们的狭窄环境中导入模块。例如,在使用该模块的函数体中。在这种情况下,import语句可能会执行多次。
除了风格问题,这样做的性能成本是多少?
答案 0 :(得分:4)
请看一下本网站的解释:
https://wiki.python.org/moin/PythonSpeed/PerformanceTips#Import_Statement_Overhead
尽管Python不会多次导入同一个模块,但根据代码的结构,您仍可能会遇到性能损失。您可以使用计时器查看实际影响。
答案 1 :(得分:3)
重复import
语句的成本非常低,因为Python缓存模块并且只导入一次(在第一个import
),除非明确要求用{{1}重新加载模块功能。重复reload
语句的效果(以及粗略的性能影响)实际上只是绑定本地名称空间中的导入名称。
import
必须锁定和解锁导入表锁,并解析提供的名称。这意味着如果频繁调用,仍然可以减慢你的程序。
答案 2 :(得分:1)
将此作为答案发布,因为它太大而无法发表评论:
我不清楚我的原始计时工作是否按预期工作,因为我得到警告说最慢的速度比最快的慢20倍 - 即:有些缓存是为了改变结果。
以下,在带有python 2.7.3的ipython笔记本中运行,但似乎表明性能命中约450纳秒:
%%timeit import numpy
pass
100000000个循环,最佳3:每循环11.3 ns
%%timeit import numpy
import numpy
pass
1000000次循环,最佳3:465 ns /循环