Python是否会优化掉仅用作返回值的变量?

Python是否会优化掉仅用作返回值的变量?,第1张

Python是否会优化掉仅用作返回值的变量?

不, 不是

CPython字节码的编译仅通过小型的猫眼优化器传递,该优化器仅用于基本优化(有关这些优化的更多信息,请参见测试套件中的test_peepholer.py)。

要查看实际发生的情况,请使用

dis
*查看生成的指令。对于第一个函数,包含分配:

from dis import disdis(func)  20 LOAD_ConST    1 (42)   2 STORE_FAST    0 (a)  34 LOAD_FAST     0 (a)   6 RETURN_VALUE

而对于第二个功能:

dis(func2)  20 LOAD_ConST    1 (42)   2 RETURN_VALUE

第一个中使用了另外两个(快速)指令:

STORE_FAST
LOAD_FAST
。这些可以快速存储和获取
fastlocals
当前执行帧数组中的值。然后,在两种情况下
RETURN_VALUE
都执行a。所以,第二个是曾经如此
轻微 ,由于执行需要更少的命令更快。

通常,请注意CPython编译器在执行的优化中是 保守 的。它 并没有
像其他编译器一样聪明(通常也有更多的信息可以使用)。除了显然是正确的之外,主要设计目标是:a)保持简单,b)尽可能快地进行编译,因此您甚至不会注意到存在编译阶段。

最后,您不应该为像这样的小问题而烦恼。速度的好处是微小的,恒定的,并且与解释Python事实所带来的开销相形见war。

*

dis
是一个小的Python模块,可反汇编您的代码,您可以使用它查看VM将执行的Python字节码。

注意: 正如@Jorn
Vernee的评论中所述,这特定于Python的CPython实现。如果其他实现愿意的话,其他实现可能会进行更积极的优化,而CPython则不会。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5617377.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存