2017-09-03 66 views
0

我正在研究CodeFights上的一些计算机科学问题,然后我发现这个问题,起初我不明白为什么第一种方法被认为是这个上下文的最佳实现。如何测量Python中的关系比较效率?

有人可以给我指导如何衡量Python中的关系比较编码效率吗?

你想编写一个函数,整数X,Y,L 和R作为参数和返回true XY在于在区间(L,R] 否则为false。你正在考虑几种方法来写这个函数内部 条件语句:

if L < x ** y <= R: 
if x ** y > L and x ** y <= R: 
if x ** y in range(L + 1, R + 1): 

回答

1

对于microbenchmarking小片段,看看the timeit module

佛。记录中,我强烈怀疑return L < x ** y <= R将是最有效的解决方案;它仅计算一次x ** y,短路,并且不构建其他对象。它也直接使用测试结果,而不是使用if检查控制明确的return Truereturn False。如果您需要选择,等效的if支票将是最快的; range测试在理论上同样快,但即使在Py 3中构建对象也会有很高的固定成本,因此遏制测试无法弥补。

+0

对,在这种情况下,最后一个选项的优化程度会降低,因为我们必须在内存中构建范围对象,但是您认为此场景中的第一个选项被认为是最佳实现,因为Python支持这种比较? –

+0

@ AlifyzF.Pires:是的,Python实际上保证了作为[语言规范](https://docs.python.org/3/reference/expressions.html#comparisons)一部分的中期术语“单一评估”:“比较可以任意链接,例如,x ShadowRanger