我目前正在学习Python,并正在学习一个教程,并提交给装饰器。但是在深入那里之前,我想对内部函数的工作方式有一个很好的了解,我遇到了这段代码。
def max(a, b, c):
def max2(x, y):
return x if x >= y else y
return max2(a, max2(b, c))
main_max = max(15, 5, 10)
print(main_max)
现在,我试图理解其背后的逻辑,但似乎无法理解传递参数的顺序。我在调试模式下运行它,并逐步进行了调试,我注意到,x被分配了b的值,y被分配了c的值。为什么会这样?
是因为在评估max2(a,max2(b,c))之前先评估了第二个参数max2(b,c)吗?
答案 0 :(得分:4)
Max接受三个参数。 Max2有两个参数。唯一相关的代码行是
return max2(a, max2(b, c))
我们知道a
是a
。为了继续进行计算,我们需要解析(使用max2
或b
或c
中的较大者。换句话说,max2(15, max2(5, 10))
可以被认为是
t = max2(5, 10) # (5 ? 10) = 10
return max2(15, t) # (15 ? 10) = 15
唯一要意识到的是max2
的范围被限制在max
内。