Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:重新导入模块的成本是多少?_Python_Import - Fatal编程技术网

python:重新导入模块的成本是多少?

python:重新导入模块的成本是多少?,python,import,Python,Import,我经常试图在狭窄的上下文中导入需要的模块。例如,在使用模块的功能主体中。在这种情况下,可以多次执行import语句 除了风格问题外,这样做的性能代价是什么?重复的导入语句几乎没有代价,因为Python缓存模块并只导入一次(第一次导入),除非明确要求使用重载函数重新加载模块。重复的import语句的效果(以及粗略的性能影响)本质上只是将导入的名称绑定到本地名称空间中 然而,它并不是完全免费的导入必须锁定和解锁导入表锁,并解析提供的名称。这意味着,如果频繁调用,仍然会降低程序的速度。请查看此网站上的

我经常试图在狭窄的上下文中导入需要的模块。例如,在使用模块的功能主体中。在这种情况下,可以多次执行import语句


除了风格问题外,这样做的性能代价是什么?

重复的
导入
语句几乎没有代价,因为Python缓存模块并只导入一次(第一次
导入
),除非明确要求使用
重载
函数重新加载模块。重复的
import
语句的效果(以及粗略的性能影响)本质上只是将导入的名称绑定到本地名称空间中


然而,它并不是完全免费的<代码>导入必须锁定和解锁导入表锁,并解析提供的名称。这意味着,如果频繁调用,仍然会降低程序的速度。

请查看此网站上的说明:


尽管Python不会多次导入同一个模块,但根据代码的结构,您可能仍然会受到性能的影响。您可以使用计时器查看实际影响。

将此作为答案发布,因为它太大,无法发表评论:

我不清楚我最初的计时工作是否如预期的那样工作,因为我收到警告说最慢的计时比最快的计时慢20倍——即:一些缓存正在发生以更改结果

但是,在使用python 2.7.3的ipython笔记本中运行的以下内容似乎表明了大约450纳秒的性能损失:

%%timeit import numpy
pass
100000000个循环,最佳3个:每个循环11.3纳秒

%%timeit import numpy
import numpy
pass
1000000个循环,最佳3个:每个循环465纳秒

%%timeit import numpy
import numpy
pass