1

我不担心我定义的函数,而是内置函数或esp。来自导入模块的那些。基本上,这些建议仍然适用吗?

http://wiki.python.org/moin/PythonSpeed/PerformanceTips#Avoiding_dots...

http://wiki.python.org/moin/PythonSpeed/PerformanceTips#Local_Variables

我认为 PyPy 的 JIT 也可以在这里帮助我,但我需要在 Linux 集群上运行这个东西(我的源代码已经是 Py3k 的)。

4

1 回答 1

4

是的。确切的版本并不重要。这些优化都归结为最大限度地减少语言特性的使用,这些语义禁止在一般情况下简单有效地实现(这是解释器所关心的,而 JIT 编译器可以为特定情况生成更好的代码)。具体来说:

  • 属性查找仍然遵循一个非常奇特的算法,例如进行哈希表查找(那些摊销的 O(1),但大 O 并不是一切),走长(好吧,在内置的情况下不是那么多)继承链和调用其他描述符(属性,获取绑定方法)。相比之下,变量(尤其是本地,见下文)查找非常简单,并且需要更少的字节码指令,除非所讨论的对象已经在堆栈的顶部。
  • 局部变量仍然可以在编译时枚举(允许使用堆栈进行一些有效的实现),而全局变量仍然可以随时添加和删除,任何人都可以引用模块对象,甚至动态使用字符串(要求使用哈希表他们)。
于 2011-09-10T19:54:43.637 回答