次のコードがあるとします。
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
私たちは当惑しています。square 関数が最初にスタックにプッシュされ、その戻り値が計算され、cube 関数に渡されますか? もう 1 つの可能性は、cube 関数が最初に呼び出され、次に引数を解決するプロセスで square 関数を呼び出す必要があることです。何を教えていただけますか?これはコンパイラまたは言語に依存しますか?