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

Loops python 3.2如何处理来自循环的函数调用?,loops,python-3.x,jit,function-calls,pypy,Loops,Python 3.x,Jit,Function Calls,Pypy,我不担心自己定义的函数,而是担心内置函数,尤其是来自导入模块的函数。基本上,这些建议仍然适用吗 我认为PyPy的JIT在这方面也可以帮助我,但我需要在Linux集群上运行它(我的源代码已经是Py3k的)。是的。确切的版本并不重要。这些优化都归结为最大限度地减少语言特性的使用,其语义支持针对一般情况的简单高效的实现(这是解释器所关心的,而JIT编译器可以针对特定情况生成更好的代码)。具体而言: 属性查找仍然遵循一种非常奇特的算法,例如,进行哈希表查找(那些是摊销的O(1),但大O不是一切),

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


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

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

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

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

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

    请注意,这些仅对CPython有效。例如,对于PyPy,它们可能介于轻度有用和真正有害之间。请注意,它们仅对CPython有效。例如,对于PyPy来说,它们可能介于轻度有用和真正有害之间。