为什么在Python中导入函数变慢

时间:2018-10-01 13:43:43

标签: python python-3.x python-import

我试图重组我的代码以在另一个文件中定义一个函数,但发现它似乎运行得慢一些。我想知道是否有人知道如何防止这种速度下降,或者是否有已知的原因。我已经知道python中的导入与复制粘贴您的代码相同,因此这种减速对我来说很奇怪。

一个例子:

from datetime import datetime
from import_test import small_test_import

def small_test(x):
    return x+1

start1 = datetime.now()
for i in range(x):
    Z=small_test(1)
end1 = datetime.now()
print(end1-start1) #1.355964

start2 = datetime.now()
for i in range(x):
    Z=small_test_import(1)
end2 = datetime.now()
print(end2-start2) #1.433045

或使用timeit:

def wrapper(func, *args, **kwargs):
    def wrapped():
         return func(*args, **kwargs)
    return wrapped

wrapped = wrapper(small_test, 1)
print(timeit.timeit(wrapped,number=x)) #1.8407
wrapped = wrapper(small_test_imported, 1)
print(timeit.timeit(wrapped, number=x)) #2.1006

我意识到这不是一个巨大的时差,但它是一致的。

1 个答案:

答案 0 :(得分:1)

如果我没记错的话,你在脚本中打印的时间差异大约相差0.8秒?导入的函数很可能不会变慢,但是您的测试设置给它带来了一个缺点:它必须清除现有的Z对象。您的脚本重新使用了变量Z,因此,第二个for循环必须清除您在第一个测试中绑定到Z的对象(返回值)。

使用以下代码再次尝试测量:

start1 = datetime.now()
for i in range(x):
    X = small_test(1)
end1 = datetime.now()
print(end1-start1)

start2 = datetime.now()
for i in range(x):
    Y = small_test_import(1)
end2 = datetime.now()
print(end2-start2)

它不会产生显着差异。