在下面的I time中10_000_000
检查10
是否在{0, ..., 9}
在第一个检查中,我使用一个中间变量,在第二个检查中,我使用一个文本
import timeit
x = 10
s = set(range(x))
number = 10 ** 7
stmt = f'my_set = {s} ; {x} in my_set'
print(f'eval "{stmt}"')
print(timeit.timeit(stmt=stmt, number=number))
stmt = f'{x} in {s}'
print(f'eval "{stmt}"')
print(timeit.timeit(stmt=stmt, number=number))
输出:
eval "my_set = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ; 10 in my_set"
1.2576093
eval "10 in {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}"
0.20336140000000036
为什么第二个要快得多(大约是5-6倍)?Python是否执行了一些运行时优化,例如,如果对文本进行了包含检查?或者,这可能是由于垃圾收集(因为它是一个字面上的python垃圾,在使用后立即收集)
在第一个测试中,您没有测试相同的两件事情,除了成员资格测试之外,您还对两个任务和查找进行计时:
使用文本和
x in s
之间的实际区别在于后者需要在全局中执行查找,即,区别是LOAD_NAME
与LOAD_CONST
:时代:
相关问题 更多 >
编程相关推荐