python 3.2如何处理来自循环的函数调用?

时间:2011-09-10 19:33:09

标签: loops python-3.x jit function-calls pypy

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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