我应该像优化C++一样优化我的Python代码吗?重要吗?
我和一个同事讨论写Python代码的效率问题。他认为,虽然我们在用Python编程,但还是要尽量优化软件的每个小部分,就像在用C++写高效算法一样。
比如说:
- 在一个
if
语句中,如果有or
,应该把最可能失败的条件放在前面,这样第二个条件就不会被检查了。 - 使用最有效的字符串处理函数,常用的操作,比如连接、分割字符串和查找子字符串,而不是那些复杂的字符串处理代码。
- 尽量少调用函数,即使这样会影响代码的可读性,因为调用函数会增加额外的开销。
我认为在大多数情况下,这些优化并不重要。我还想说,代码的背景并不是超高效的网络运营中心或导弹制导系统。我们大多数时候是在用Python写测试代码。
你怎么看这个问题?
10 个回答
11
根据我的经验,这种过早的微优化通常是浪费时间,即使是在C和C++中也是如此。首先要写出可读性好的代码。如果代码运行得太慢,可以用性能分析工具来检查一下,如果有必要,再去修复那些耗时的部分。
从根本上说,你需要考虑投资回报。为了节省几微秒的时间,是否值得花额外的精力去阅读和维护那些“优化过”的代码?在大多数情况下,这并不值得。
(另外,编译器和运行时环境也在不断变得更聪明。有些微优化可能随着时间的推移变成微劣化。)
13
这个答案其实很简单:
- 要遵循Python的最佳实践,而不是C++的最佳实践。
- 在Python中,代码的可读性比速度更重要。
- 如果性能出现问题,先进行测量,然后再开始优化。
14
我的回答是:
我们应该忘记那些小的效率问题,大约97%的时间里:过早的优化是万恶之源。
(引用自Knuth, Donald. 《结构化编程与goto语句》,ACM计算机调查期刊,第6卷,第4期,1974年12月,第268页)
如果你的应用程序需要查询数据库,那么这一次查询所花的时间,远远超过你通过那些小优化能节省的时间……
而且如果你一直追求这样的性能,那为什么不直接用汇编语言编程呢?因为Python更容易写和维护?如果是这样,你说得对 :-)
最重要的是你的代码要容易维护,而不是节省几微秒的CPU时间!
当然,除非你有成千上万台服务器——但这真的是你的情况吗?