gpt4 book ai didi

python - 帧被压入堆栈的顺序

转载 作者:行者123 更新时间:2023-11-30 23:40:16 25 4
gpt4 key购买 nike

假设您有以下代码。

def square(x):
print ("Just before square returns")
for k in dir():
print ("{0} -------> {1}".format(k, eval(k)))
return x*x
def cube(x):
print ("Just before cube returns")
for k in dir():
print ("{0} -------> {1}".format(k, eval(k)))
return x*x*x

x = 5
print ("cube(square({0})) = {1}".format(x, cube(square(x))))
print ("Just before main returns")
for k in dir():
print ("{0} -------> {1}".format(k, eval(k)))

运行此代码会显示以下内容

Just before square returns
x -------> 5
Just before cube returns
x -------> 25
cube(square(5)) = 15625
Just before main returns
__builtins__ -------> <module 'builtins' (built-in)>
__cached__ -------> None
__doc__ -------> None
__file__ -------> exampleOne.py
__name__ -------> __main__
__package__ -------> None
cube -------> <function cube at 0x1037b78>
square -------> <function square at 0x1037af0>
x -------> 5

我们很困惑。平方函数是否首先被压入堆栈并计算其返回值并将其传递给立方体函数?另一种可能是先调用cube函数,然后在求解参数的过程中,必须调用square函数。你能告诉我们什么?这取决于编译器或语言吗?

最佳答案

嗯,当然这可能取决于语言,但你的例子是Python。

在Python中,函数参数总是在调用它们作为参数的函数之前被评估。 (参见 the documentation 。)由于 square(x) 作为 cube 的参数传递,因此首先调用 square,然后调用结果被传递到cube。换句话说,表达式中的函数调用始终“从内到外”求值,最里面的函数首先首先求值。这就像数学表达式的计算顺序(最里面的括号在前)。

关于python - 帧被压入堆栈的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12751763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com