Python中替代开关的性能差异

Chu*_*uck 3 python performance switch-statement

我已经阅读了一些关于Python中switch语句的替代方法的文章.主要使用dicts代替很多if和elif.然而,没有人真正回答这个问题:是否有更好的性能或效率?我已经阅读了一些论据,如果和elifs必须检查每个语句并且使用许多ifs和elif变得低效.然而,使用dicts可以解决这个问题,但是你最终必须创建新的模块才能调用,从而取消性能提升.唯一不同的是可读性.

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

Ale*_*lli 8

dict的性能通常是无与伦比的,因为查找到a dict将是O(1),除了在罕见的和几乎从未观察到的情况下(其中密钥涉及用户编码的类型与糟糕的散列;-).你不必像你说的那样"创建新的模块",只需要任意的callables,而且只需执行一次就可以完成dict的创建,无论如何都不是特别昂贵 - 在操作过程中,它只是一次查找和一次调用,闪电般的闪电时间.

正如其他人所建议的那样,尝试尝试timeit一些备选方案的微观基准.我的预测:有几十个可能的游戏,正如你所提到的那样,你会打你的额头,除了一个关于callables的词典之外什么都不考虑! - )

如果您发现运行自己的基准测试并且可以提供一些规格太难了,我想我们可以为您量身定做替代方案,但如果您在向SO寻求帮助之前尝试自己做,那将会更有启发性! - )


Eli*_*sky 6

您应该关注代码的可读性和可维护性,而不是其效率.这适用于大多数情况,尤其是您现在描述的情景.效率差异可能是微不足道的(您可以使用少量的基准测试代码轻松检查它),但30-40 elif是一个警告标志 - 也许可以抽象出来并使代码更具可读性.描述你的情况,也许有人可以想出更好的设计.