作为问题“在普通情况下使用内置的__import__()”的后续,我进行了一些测试,并得出了令人惊讶的结果。
我在此比较了经典的
到目前为止,
但是,对于非标准模块,结果则相反:
这两者执行时间差异的原因是什么? 标准模块中`import`语句更快的实际原因是什么? 而在其他模块中,为什么`__import__`函数更快呢? 测试使用的是Python 3.6版本。
我在此比较了经典的
import
语句和调用__import__
内置函数的执行时间。为此,我使用以下脚本以交互模式运行:import timeit
def test(module):
t1 = timeit.timeit("import {}".format(module))
t2 = timeit.timeit("{0} = __import__('{0}')".format(module))
print("import statement: ", t1)
print("__import__ function:", t2)
print("t(statement) {} t(function)".format("<" if t1 < t2 else ">"))
与链接的问题类似,以下是导入sys
和其他一些标准模块进行比较:
>>> test('sys')
import statement: 0.319865173171288
__import__ function: 0.38428380458522987
t(statement) < t(function)
>>> test('math')
import statement: 0.10262547545597034
__import__ function: 0.16307580163101054
t(statement) < t(function)
>>> test('os')
import statement: 0.10251490255312312
__import__ function: 0.16240755669640627
t(statement) < t(function)
>>> test('threading')
import statement: 0.11349136644972191
__import__ function: 0.1673617034957573
t(statement) < t(function)
到目前为止,
import
比__import__()
更快。这对我来说是有道理的,因为正如我在链接的帖子中写的那样,当后者导致调用__import__
时,我发现IMPORT_NAME
指令与CALL_FUNCTION
相比进行了优化。但是,对于非标准模块,结果则相反:
>>> test('numpy')
import statement: 0.18907936340054476
__import__ function: 0.15840019037769792
t(statement) > t(function)
>>> test('tkinter')
import statement: 0.3798560809537861
__import__ function: 0.15899962771786136
t(statement) > t(function)
>>> test("pygame")
import statement: 0.6624641952621317
__import__ function: 0.16268579177259568
t(statement) > t(function)
这两者执行时间差异的原因是什么? 标准模块中`import`语句更快的实际原因是什么? 而在其他模块中,为什么`__import__`函数更快呢? 测试使用的是Python 3.6版本。