【问题标题】:Module importing in Python - performance [duplicate]Python中的模块导入-性能[重复]
【发布时间】:2015-02-12 21:01:18
【问题描述】:

在 Python(以及最流行的编程语言)中导入包/模块的“正常”方式是编写一个导入语句,例如import math 在新创建的 Python 模块的开头。

如果我们在一个方法中导入另一个模块(我们多次使用这个方法)会发生什么,解释器会再次导入我们的模块(定义和语句)吗?这会影响我们程序的性能吗?

简而言之,以下之间的性能差异是什么:

import math

def int_square(n):
    return int(math.sqrt(n))

和:

def int_square(n):
    import math
    return int(math.sqrt(n))

编辑: 我刚刚用以下代码行测试了这一点:

import time
import math

def calculate(n):
    return math.sqrt(n)
def calculate2(n):
    import math
    return math.sqrt(n)

t1 = time.time()
for i in range(1000000):
    calculate(3)
t2 = time.time()

print(t2 - t1)

t1 = time.time()
for i in range(1000000):
    calculate2(3)
t2 = time.time()

print(t2 - t1)

输出(在 i3 第三代处理器上)

calculate()  -> 0.444s 
calculate2() -> 1.500s

【问题讨论】:

  • 所以我的理论被证明是正确的?
  • 是的,但我仍然不明白为什么这被标记为重复。谢谢你,先生!
  • 我同意,人们应该始终了解一种语言的基本原则,包括效率和性能。

标签: python


【解决方案1】:

考虑一下。如果您多次调用一个方法,那么每次在方法中导入模块而不是一次是没有意义的。它只是更有效,更合乎逻辑。

【讨论】:

  • 你是对的。但是导入同一个模块 N 次会影响性能吗?
  • 我相信确实如此。不显着,但有效率表现。
  • 是的,我刚试过。在无限 while 循环中不断导入的程序会消耗 8% 的 CPU 使用率,而单个导入和 while 循环会消耗 6%。
  • @MalikBrahimi 尝试进行分析而不是查看 CPU 使用情况。一旦一个模块被导入,它就会被导入,并且将它导入到同一个命名空间的进一步尝试几乎被忽略了。
  • 如何在 Windows 中配置文件?
猜你喜欢
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 2020-10-03
相关资源
最近更新 更多