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

发布于 2024-12-03 19:55:21 字数 487 浏览 2 评论 0原文

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

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

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

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

I am not worried about functions defined by me, but built-in functions or esp. ones from imported modules. Basically, do these pieces of advice still apply?

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

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

I think the JIT of PyPy could have helped me here too, but I need to run the thing on a Linux cluster (and my source is for Py3k already).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

好久不见√ 2024-12-10 19:55:21

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

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

Yes. The exact version doesn't matter much. These optimizations all boil down to minimizing the use of language features with semantics that prohobit simple and efficient implementations for the general case (which is all an interpreter cares about, while a JIT-compiler can generate better code for specific cases). Specifically:

  • Attribute lookup still follows a pretty fancy algorithm, e.g. making hashtable lookups (those are amortized O(1), but big O isn't everything), walking up longish (well, not so much in the case of builtins) inheritance chains and invoking other descriptors (properties, getting bound methods). Variable (especially local, see below) lookup is dead simple in comparision, and requires fewer bytecode instructions unless the object in question is already on the top of the stack.
  • Local variables can still be enumerated at compiletime (allowing somewhat efficient implementation using a stack), while globals can still be added and removed at all times, by anyone with a reference to the module object, and even dynamically using string (requring using hashtable for them).
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文