我想在Python中测试IF语句到dictionary case语句的效率。因为没有case语句,所以我现在使用dictionary方法。看起来是这样。。。。你知道吗
self.options = {"0": self.racerOne,
"1": self.racerTwo,
"2": self.racerThree,
"3": self.racerFour,
"0f": self.racerFinish,
"1f": self.racerFinish,
"2f": self.racerFinish,
"3f": self.racerFinish,
"x": self.emptyLine,
"t": self.raceTime,
"G": self.letsGo,
"CD": self.countDown,
"C": self.emptyLine,
}
真实世界的数据会有所不同,但我有一种方法可以运行一个控制测试,在6.4秒内读取688行流数据。
我也读过这篇文章:Python Dictionary vs If Statement Speed我还要检查cProfile方法。你知道吗
与dictionary选项相比,有没有人对如何准确地度量IF语句有其他建议?通过高效,我猜这意味着使用最少的处理能力,可以更好地跟上流。你知道吗
在这6.4秒内,我读取每一行流数据,对其进行解析、评估,然后实时直观地显示出来。我不认为在Win或OSX系统上运行我的应用程序会有什么不同,但它也必须在处理能力有限的Raspberry Pi上运行。你知道吗
提前谢谢。你知道吗
听起来好像你要优化的主要领域不是这句话。你知道吗
不过,出于好奇,我还是检查了一下。直观的答案是python字典是作为哈希表实现的,这一点在您所链接的问题中给出。查找应按项目数在O(1)左右缩放。如果你所展示的语句将按O(n)缩放,因为每个语句都将按顺序执行。通过使用每个函数运行1000个随机数,每个函数有2到1000个选项,我得到以下计时结果(y刻度是每个选项的秒数,是对数刻度)。如果链是蓝色的,dict lookup是绿色的。x刻度有许多可能的选择:
可以看出,查找是快,并且比长if语句链快得多。你知道吗
即使是短链,在这段代码中,查找速度仍然更快,或者大致相同:
但请注意这里的时间。我们讨论的是我电脑上每个选项的时间在亚微秒范围内:对于较少的选项,大约为600ns。在这一点上,开销可能来自简单的函数调用。另一方面,如果你有很多可能的选择,最好的选择应该非常清楚。你知道吗
上面的代码如下。它使用numpy来记录所有的时间。对于这种简单的计时问题,通常最容易使用时间。时间()在你想做的事情之前和之后得到一个时间值。对于一些非常快的事情,你需要循环多次并取平均次数。你知道吗
我应该补充一点,我创建if语句链的方式有点邪恶。在这样做时(使用exec语句),函数可能没有以同样的方式优化:我不是python内部结构的专家。你知道吗
相关问题 更多 >
编程相关推荐