python编译器可以优化不必要的名称绑定吗?例如,可以将一个函数定义为:
def add_one(x):
a = x
b = a
c = b
d = c
e = d
f = e
g = f
return g + 1
被优化为公正
def add_one(x):
return x + 1
答案 0 :(得分:3)
不,Python无法优化这种情况,因为Python是一种高度动态的语言,因此名称在运行时可能具有优化器无法预测或解释的含义。例如,Python的检查功能使您可以在运行时检索这些名称。
尽管这在您构造的不太可能的场景中似乎是人为的,但在其他更复杂的情况下,将别名分配给一个名称,然后自省使用或在其他函数的调用中访问该名称并不是没有听说过的。例如,在发生追溯的情况下,zope.exceptions
library将沿着堆栈查找__traceback_info__
个本地变量。您不希望编译器优化掉那些原本无用的分配。
还有更多这样的场景,使得Python代码优化比大多数开发人员所理解的复杂得多。