python - Python 中替代开关的性能差异

标签 python performance switch-statement

我阅读了一些关于 Python 中 switch 语句的替代方法的文章。主要使用字典而不是大量的 if 和 elif。然而,没有人真正回答这个问题:有更好的性能或效率吗?我读过一些论据,认为 if 和 elif 必须检查每个语句,并且对于许多 if 和 elif 来说效率低下。然而,使用字典可以解决这个问题,但你最终不得不创建新的模块来调用,这无论如何都会取消性能提升。最终的唯一区别是可读性。

任何人都可以对此发表评论,从长远来看真的有什么不同吗?有人经常使用替代品吗?我问的唯一原因是因为我最终将拥有 30-40 个 elif/if,并且将来可能更多。任何输入表示赞赏。谢谢。

最佳答案

dict 的性能通常是无与伦比的,因为查找 dict 的时间复杂度为 O(1),除非在极少数情况下且几乎从未观察到案例(他们的关键涉及具有糟糕散列的用户编码类型;-)。您不必像您所说的那样“创建新模块”,只需任意可调用对象,并且只执行一次以准备 dict 的创建无论如何不是特别昂贵 - 在操作期间,只需一次查找和一次调用,闪电般的时间。

正如其他人所建议的那样,尝试使用 timeit 来试验一些备选方案的微基准。我的预测:有几十种可能性在起作用,正如你所说的那样,你会拍拍你的额头考虑任何事情一个可调用的命令!-)

如果您发现运行自己的基准测试太难并且可以提供一些规范,我想我们可以为您对替代方案进行基准测试,但如果您在向 SO 寻求帮助之前尝试自己做,那真的会更有指导意义!-)

关于python - Python 中替代开关的性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1692107/

相关文章:

python - Collada (*.dae) 文件结构和 Pycollada

java - Switch 差异的语法

Python-内部有 nan 条目的两个数组的互相关

python - Rails 模型继承

c# - Java 线程创建性能 vs C# 线程创建性能 vs C++( native 线程)?

performance - 是否有任何关于 AVX2 收集指令延迟的数据?

performance - Spark 函数与 UDF 性能?

switch-statement - 优化 Swift 代码(switch case)

c - 使用数组在 C 中创建 switch 语句?

python - 如何使用第一行作为键的csv文件创建字典