吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1776|回复: 10
收起左侧

[求助] 关于python画堆栈图追踪变量的问题

[复制链接]
Ano 发表于 2019-12-25 14:37
python初学者,最近在看Think Python这本书,里面提到堆栈图可以方便了解变量的取值,也有一些练习题。
其中一道题我不会,通过搜索找到了答案……尴尬的是,有了答案还是看不懂。请教下各位老哥:
习题及参考答案如下:
[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
毫无难度啊,就是基本流程。

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

然后就是按流程走咯。

红线是程序的执行顺序,对应横向的行号。
Snipaste_2019-12-25_15-49-21.jpg
 楼主| 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
毫无难度啊,就是基本流程。

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

谢谢~请问这个红线是用了什么工具吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 22:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表