我应该像优化C++一样优化我的Python代码吗?重要吗?

6 投票
10 回答
1025 浏览
提问于 2025-04-15 13:58

我和一个同事讨论写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时间!
当然,除非你有成千上万台服务器——但这真的是你的情况吗?

撰写回答