[Tutor] Stack Diagrams
Alan Gauld
alan.gauld at freenet.co.uk
Mon Apr 17 11:39:42 CEST 2006
> I am referring to Stack Diagrams from
> http://www.ibiblio.org/obp/thinkCSpy/chap03.htm#11
>
> I did not understood this, please explain me with an example
The diagram he goives is an example but I'll try to reiterate slightly differently.
First the context:
def printTwice(bruce):
print bruce, bruce
def catTwice(part1, part2):
cat = part1 + part2
printTwice(cat)
>>> chant1 = "Pie Jesu domine, "
>>> chant2 = "Dona eis requiem."
>>> catTwice(chant1, chant2)
This is the code that he is discussing.
The stuff that is outside a function is in the __main__ function,
which is a conceptual idea for the top level of the program.
Working from the bottom of the code up we see that in the
main function we have two variables: chant1, chant 2 each
with values assigned. Thats the top box or frame on the
diagram.
Main then calls catTwice which is the next function up.
catTwice takes two arguments: part1, part2
These arguments take the values of chant1,chant2.
It also has a local variable called cat which takes the
value of part1+part2
This is what is shown in the second frame of the diagram.
catTwice then calls printTwice, our top function.
printtwice takes a single argument called(bizarrely!) bruce.
bruce takes the value of cat
This is shown in the third frame box of the diagram.
The stack diagram is a debugging/diagnostic tool used
in figuring out the state of the program at any given time.
In practice they are rarely used, but the concept often
is in the form of a variable table(you need fixed width
font for this bit!):
chant1 chant2 part1 part2 cat bruce
'blah' 'blah' - - - -
'blah' 'blah' 'blah' 'blah' - -
'blah' 'blah' 'blah' 'blah' 'blah blah' -
'blah' 'blah' 'blah' 'blah' 'blah blah' 'blah blah'
Even this is cumbersome except for numeric values and
I've only ever used it for really complex algorithms.
A simpler form of the stack diagram is presented by
Python when it gfenerates an error. The error message
includes a *stack trace* which shows the sequence of
functions. Thus if we introduce an error into
printTwice, we get the following stack trace:
>>> def printTwice(b):
... raise TypeError # create an error here
...
>>> def catTwice(p1,p2):
... c = p1 + p2
... printTwice(c)
...
>>> c1 = 'busy'
>>> c2 = 'bee'
>>> catTwice(c1,c2)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 3, in catTwice
File "<stdin>", line 2, in printTwice
TypeError
>>>
Notice the three File lines are in fact the
frames from stack diagram. You can use the
Python debugger to examine the individual
frame variables as needed, so in practice
most folks use the debugger (or just insert
print statements!) to examine the stack
frames if needed rather than draw the diagram.
But that only works if you know what you
expect to see, thats where a stack diagram
or variable table comes in useful - to
figure out what you *expect* to see and
compare it with what the debugger says
*is* there.
HTH,
Alan G
Author of the learn to program web tutor
http://www.freenetpages.co.uk/hp/alan.gauld
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/tutor/attachments/20060417/cd4c4f23/attachment.html
More information about the Tutor
mailing list