Studieren Sie folgenden Code:

import inspect
 
# Ein bisschen Python Magic, um Funktionsname und Zeilennummer auszugeben. Duerfen Sie ignorieren.
def niceInfo(s):
    print "Funktion %s, Zeile %d:" % (inspect.getframeinfo(inspect.currentframe().f_back)[2], inspect.currentframe().f_back.f_lineno)
    print s
    print    
 
# foo: Gibt das Quadrat vom Argument zurueck.
# Die Variablen a und b sind hier lokal und haben nicht mit den Variablen a und b ausserhalb zu tun,
# mal abgesehen davon, dass der Wert der Variablen b der Funktion bar in die Variable a der Funktion foo kopiert wird.
def foo(a):
    b=a*a
    niceInfo("a=%d, b=%d" % (a,b))
    return b
 
# bar: Gibt das Quadrat (mit Hilfe von foo) minus 4 zurueck. 
def bar(b):
    a=foo(b)-4
    niceInfo("a=%d, b=%d"% (a,b))
    return a
 
a = 4
b = 5
niceInfo("a=%d, b=%d" % (a,b))
c = bar(3)
# Die Variablen a und b werden nicht veraendert!
niceInfo("a=%d, b=%d, c=%d" % (a,b,c))