我应该像C++一样优化我的python代码吗?有关系吗?

Avi*_*ion 5 python performance

我和一位同事讨论过有效编写python的问题.他声称虽然你正在编写python,你仍然需要尽可能地优化软件的一点点,就像你在C++中编写一个有效的算法一样.

像:

  • 在一个if声明中,or总是把条件最有可能先失败,所以第二个不会被检查.
  • 使用最有效的函数来操作常用的字符串.不是研磨字符串的代码,而是简单的事情,比如进行连接和分割,以及查找子字符串.
  • 尽可能少地调用函数,即使它以牺牲可读性为代价,因为它会产生开销.

我说,在大多数情况下,这并不重要.我还应该说,代码的背景不是超高效的NOC或导弹制导系统.我们主要是在python中编写测试.

你对此事有何看法?

Pas*_*TIN 14

我的答案是:

我们应该忘记小的效率,大约97%的时间说:过早的优化是所有邪恶的根源.

(引用Knuth,Donald.结构化编程,参见陈述,ACM期刊计算调查,第6卷,第4期,1974年12月.第268页)


如果你的应用程序正在对数据库进行任何查询,那么一个查询将花费更多时间,而不是那些小优化所能获得的任何东西,无论如何......

如果在这样的表演后运行,为什么不用汇编语言编码,毕竟?因为Python更容易/更快地编写和维护?好吧,如果是这样,你是对的:-)

最重要的是您的代码易于维护; 不是几秒微秒的CPU时间!
好吧,也许除非您有数千台服务器 - 但这是您的情况吗?

  • 这几乎适用于任何编程语言/应用程序,实际上(我不再用C++编写代码,并且从未在Python中编程,但所有这些都适用于PHP,Javascript,SQL或我能想到的任何内容^^) (4认同)
  • 重要的是,这**也适用于C++.** (3认同)

e-s*_*tis 13

答案很简单:

  • 遵循Python最佳实践,而不是C++最佳实践.
  • Python中的可读性比速度更重要.
  • 如果性能成为问题,请进行测量,然后开始优化.

  • 可读性是否更重要,速度取决于您的具体情况. (6认同)
  • 可读性并不总是比速度更重要,您选择的语言并不能为您做出决定.您通常应该遵循相同的规则 - 使用该语言的可接受模式编写好的,干净的,可读的代码,并且当它太慢时,优化它.当然,并非所有过早的优化都是糟糕的,只有推测性的过早优化 - 如果你*知道*你将处理一个特定大小或特征的数据集,那么一定要选择一个能很好地处理这个问题的算法. (2认同)
  • 我同意你们俩的观点。EFraim,环境当然很重要,但在这种情况下,Python 允许您绑定到任何比本身更快的语言。因此,如果适用这种情况,对于系统中存在瓶颈的部分,选择 C ​​而不是 Python 会更好。Python 并不意味着要快。完全没有。@Nick Bastin,确实常识符合你的方向。如果您知道最好的方法,并且维护成本不高,为什么不采用更快的方法呢?只是选择 Python 就已经选择了一种将人类时间置于 CPU 时间之上的编码哲学。 (2认同)

Sim*_*son 10

这种过早的微优化通常在我的经验中浪费时间,即使在C和C++中也是如此.首先编写可读代码.如果运行速度太慢,请通过分析器运行,如有必要,请修复热点.

从根本上说,你需要考虑投资回报率.是否值得花费额外的精力来阅读和维护"优化​​"代码,节省几微秒?在大多数情况下,它不是.

(此外,编译器和运行时变得越来越聪明.随着时间的推移,一些微观优化可能会变成微观悲观.)

  • +1:在使用"优化"愚弄之前的配置文件. (4认同)