我试图重组我的代码以在另一个文件中定义一个函数,但发现它似乎运行得慢一些。我想知道是否有人知道如何防止这种速度下降,或者是否有已知的原因。我已经知道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
我意识到这不是一个巨大的时差,但它是一致的。
答案 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)
它不会产生显着差异。