2

在 IDLE GUI 中测试代码时,我正在查看 Python 中一个使人衰弱的性能问题。

对于递归函数:

def f(input1,input2):
    newinput1 = g(input1,input2);
    return f(newinput1,input2)

如果我调用函数 f(20,A+10) ,其中 A 是一个常数,那么每次递归调用 f() 是否将 input2 = "A+10" 作为一个重新解释的字符串,得到一个需要重新计算的表达式, 还是得到一个 A+10 结果的数字?

我在帮助文件中找到了这个,但需要更明确的定义才能理解:

“抽象往往会创建间接并迫使解释器工作更多。如果间接级别超过完成的有用工作量,您的程序将会变慢。您应该避免过度抽象,特别是在微小的函数或方法的形式下(也常常不利于可读性)。”

Python到底发生了什么?

4

1 回答 1

1

当您按如下方式调用函数时:

f(20, A+10)

Python 计算结果和20结果。假设目前是,所以可以解决。然后将名称绑定到值并在调用的环境中。Python 不需要在使用该值时重新评估,也不会记录任何有关如何获取该值的信息。特别是,如果你打电话20A+10A20A+1030input1input22030fA+1030

f(20, A)

input2将绑定到 的当前值A,但不会保留与 的任何联系A。重新分配input2内部f不会影响A.

于 2013-09-02T04:04:32.977 回答