python 可以优化掉过多的名称绑定吗?

Can python optimize out excessive name binding?

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

不,Python 无法优化这种情况,因为 Python 是一种高度动态的语言,名称在运行时可能具有优化器无法预测或解释的含义。例如,Python 的检查功能让您可以在运行时检索这些名称。

虽然这在您构造的和不太可能的场景中似乎是人为的,但在其他更复杂的情况下,将别名分配给一个名称,然后在对另一个函数的调用中使用或以其他方式访问该别名并非闻所未闻。例如,zope.exceptions library 在堆栈中查找 __traceback_info__ 局部变量以防回溯。您不希望编译器优化掉那些 'useless' 赋值。

还有很多这样的场景使得 Python 代码优化比大多数开发人员所理解的要复杂得多。