Ano 发表于 2019-12-25 14:37

关于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是怎么来的呢?

qwjituan 发表于 2019-12-25 14:43

感谢楼主分享,支持一下!

XiaoBaizzZ 发表于 2019-12-25 14:48

感谢楼主分享,支持一下!感谢楼主分享,支持一下!

Ano 发表于 2019-12-25 14:55

你们这回贴也太。。。有会的老铁来走点心指点下吗

gufengaoyue 发表于 2019-12-25 15:32

就是在调用b()时,函数中各个参数及变量的值。

main,一开始,x=1,y=2,代入函数 c()时,c函数中3个参数xyz分别是1,5,3,里面的变量total,square=9,8100
类推...

不知道这个是不是你想要的...

带色的小马甲 发表于 2019-12-25 15:33

看函数的调用关系就知道了,b函数的参数z是由c函数传过去的,所以z的值会等于total

libaibuaidufu 发表于 2019-12-25 15:36

可以依次打印一下值 看看值在什么变化了

dreamrise 发表于 2019-12-25 15:50

毫无难度啊,就是基本流程。

函数定义的时候是不会运行的,只有在调用的时候才执行。

然后就是按流程走咯。

红线是程序的执行顺序,对应横向的行号。

Ano 发表于 2019-12-25 16:12

gufengaoyue 发表于 2019-12-25 15:32
就是在调用b()时,函数中各个参数及变量的值。

main,一开始,x=1,y=2,代入函数 c()时,c函数中3个参数 ...

谢谢,清楚了,主要是刚学,对实参和形参的理解还不到位导致的问题。

Ano 发表于 2019-12-25 16:14

dreamrise 发表于 2019-12-25 15:50
毫无难度啊,就是基本流程。

函数定义的时候是不会运行的,只有在调用的时候才执行。


谢谢~请问这个红线是用了什么工具吗?
页: [1] 2
查看完整版本: 关于python画堆栈图追踪变量的问题