关于python画堆栈图追踪变量的问题
python初学者,最近在看Think Python这本书,里面提到堆栈图可以方便了解变量的取值,也有一些练习题。其中一道题我不会,通过搜索找到了答案……尴尬的是,有了答案还是看不懂。请教下各位老哥:
习题及参考答案如下:
"""
Exercise 6.1.
Draw a stack diagram for the following program. What does the program print?
def b(z):
prod = a(z, z)
print(z, prod)
return prod
def a(x, y):
x = x + 1
return x * y
def c(x, y, z):
total = x + y + z
square = b(total)**2
return square
x = 1
y = x + 1
print(c(x, y+3, x+y))
"""
def b(z):
prod = a(z, z)
print(z, prod)
return prod
def a(x, y):
x = x + 1
return x * y
def c(x, y, z):
total = x + y + z
square = b(total)**2
return square
x = 1
y = x + 1
print(c(x, y+3, x+y))
'''
main:
x ---> 1
y ---> 2
c:
x ---> 1
y ---> 5
z ---> 3
total ---> 9
square ---> 8100
b:
z ---> 9
prod ---> 90
a:
x ---> 9
y ---> 9
x ---> 10
Program prints:
9 90
8100
'''
他这里是先main,然后c-b-a的顺序,请问下为什么这样呢?然后就是从square开始,我就看不懂这些值都是怎么得来的了。最主要就是关于变量b,z--->9是怎么来的呢? 感谢楼主分享,支持一下! 感谢楼主分享,支持一下!感谢楼主分享,支持一下! 你们这回贴也太。。。有会的老铁来走点心指点下吗 就是在调用b()时,函数中各个参数及变量的值。
main,一开始,x=1,y=2,代入函数 c()时,c函数中3个参数xyz分别是1,5,3,里面的变量total,square=9,8100
类推...
不知道这个是不是你想要的... 看函数的调用关系就知道了,b函数的参数z是由c函数传过去的,所以z的值会等于total 可以依次打印一下值 看看值在什么变化了 毫无难度啊,就是基本流程。
函数定义的时候是不会运行的,只有在调用的时候才执行。
然后就是按流程走咯。
红线是程序的执行顺序,对应横向的行号。 gufengaoyue 发表于 2019-12-25 15:32
就是在调用b()时,函数中各个参数及变量的值。
main,一开始,x=1,y=2,代入函数 c()时,c函数中3个参数 ...
谢谢,清楚了,主要是刚学,对实参和形参的理解还不到位导致的问题。 dreamrise 发表于 2019-12-25 15:50
毫无难度啊,就是基本流程。
函数定义的时候是不会运行的,只有在调用的时候才执行。
谢谢~请问这个红线是用了什么工具吗?
页:
[1]
2