我在学习SICP课程时,环境图中以下代码的执行顺序与我预想的不一致。
def add_one(x):
y = x+1
return y
def square(x):
return x*x
square(add_one(9))
我期待以下评估顺序:
square
。返回一个函数值。add_one(9)
。add_one
。返回一个函数值。9
。现在表达式 add_one(9)
返回 10square(add_one(9))
返回100。但是,我在这个网站上运行代码,它告诉我,
add_one
框架是在square
之前创建的,这与我的预期相反。是吗?
我向 ChatGPT 询问了这个问题。它给出的答案是,这是因为在Python中,函数调用的优先级高于运算符。
在为 square() 提供操作数之前,您无法对其求值。因此必须首先评估 add_one() 以便将结果传递给 square()。