Lokale Variablen in verschachtelten Funktionen
Okay, denk dran, ich weiß, es wird schrecklich verworren aussehen, aber bitte hilf mir zu verstehen, was passiert.
from functools import partial
class Cage(object):
def __init__(self, animal):
self.animal = animal
def gotimes(do_the_petting):
do_the_petting()
def get_petters():
for animal in ['cow', 'dog', 'cat']:
cage = Cage(animal)
def pet_function():
print "Mary pets the " + cage.animal + "."
yield (animal, partial(gotimes, pet_function))
funs = list(get_petters())
for name, f in funs:
print name + ":",
f()
Gibt:
cow: Mary pets the cat.
dog: Mary pets the cat.
cat: Mary pets the cat.
Also, warum bekomme ich nicht drei verschiedene Tiere? Ist das nichtcage
'gepackt' in den lokalen Bereich der verschachtelten Funktion? Wenn nicht, wie sucht ein Aufruf der verschachtelten Funktion nach den lokalen Variablen?
Ich weiß, dass solche Probleme normalerweise bedeuten, dass man es falsch macht, aber ich möchte verstehen, was passiert.