gpt4 book ai didi

python - 为什么 Python 不优化掉临时变量?

转载 作者:太空狗 更新时间:2023-10-30 01:51:00 25 4
gpt4 key购买 nike

福勒的 Extract Variable重构方法,以前是Introduce Explaining Variable ,说使用临时变量使代码对人类更清晰。这个想法是通过引入一个原本不需要的局部变量来阐明复杂的代码,并为该变量命名以供说明。它还提倡这种对评论的解释.. Other languages优化掉临时变量,这样就没有时间或空间资源的成本。为什么 Python 不这样做?

In [3]: def multiple_of_six_fat(n):   ...:     multiple_of_two = n%2 == 0   ...:     multiple_of_three = n%3 == 0   ...:     return multiple_of_two and multiple_of_three   ...:In [4]: def multiple_of_six_lean(n):   ...:     return n%2 == 0 and n%3 == 0   ...:
In [5]: import disIn [6]: dis.dis(multiple_of_six_fat)  2           0 LOAD_FAST                0 (n)              3 LOAD_CONST               1 (2)              6 BINARY_MODULO              7 LOAD_CONST               2 (0)             10 COMPARE_OP               2 (==)             13 STORE_FAST               1 (multiple_of_two)  3          16 LOAD_FAST                0 (n)             19 LOAD_CONST               3 (3)             22 BINARY_MODULO             23 LOAD_CONST               2 (0)             26 COMPARE_OP               2 (==)             29 STORE_FAST               2 (multiple_of_three)  4          32 LOAD_FAST                1 (multiple_of_two)             35 JUMP_IF_FALSE_OR_POP    41             38 LOAD_FAST                2 (multiple_of_three)        >>   41 RETURN_VALUEIn [7]: dis.dis(multiple_of_six_lean)  2           0 LOAD_FAST                0 (n)              3 LOAD_CONST               1 (2)              6 BINARY_MODULO              7 LOAD_CONST               2 (0)             10 COMPARE_OP               2 (==)             13 JUMP_IF_FALSE_OR_POP    29             16 LOAD_FAST                0 (n)             19 LOAD_CONST               3 (3)             22 BINARY_MODULO             23 LOAD_CONST               2 (0)             26 COMPARE_OP               2 (==)        >>   29 RETURN_VALUE

最佳答案

因为 Python 是一种高度动态的语言,引用会影响行为。

比较如下,例如:

>>> id(object()) == id(object())
True
>>> ob1 = object()
>>> ob2 = object()
>>> id(ob1) == id(ob2)
False

如果 Python “优化”了 ob1ob2 变量,行为就会改变。

Python 对象的生命周期由引用计数决定。添加weak references进入混合和线程,你会发现优化掉变量(甚至是本地变量)会导致不良的行为变化。

此外,在 Python 中,从性能角度来看,删除这些变量几乎不会改变任何东西。本地命名空间已经高度优化(值通过数组中的索引查找);如果您担心取消引用局部变量的速度,那么您在项目的那个时间关键部分使用了错误的编程语言。

关于python - 为什么 Python 不优化掉临时变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28993557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com