我正在考虑在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到底发生了什么?
答案 0 :(得分:1)
按以下方式调用函数时:
f(20, A+10)
Python评估20
到20
和A+10
到任何可行的方法。我们假设A
目前为20
,因此A+10
适用于30
。然后,名称input1
和input2
会在20
调用的环境中绑定到值30
和f
。使用该值时,Python不需要重新评估A+10
,也不会记录有关如何获取值30
的任何内容。特别是,如果你打电话
f(20, A)
input2
将绑定到A
的当前值,但不会与A
保持任何关联。在input2
内重新分配f
不会影响A
。