Bien, tengan paciencia conmigo en esto, sé que se verá terriblemente complicado, pero ayúdenme a comprender lo que está sucediendo.Variables locales en las funciones anidadas de Python
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()
Da:
cow: Mary pets the cat.
dog: Mary pets the cat.
cat: Mary pets the cat.
Así que, básicamente, ¿por qué no recibo tres animales diferentes? ¿No está 'empaquetado' el cage
en el alcance local de la función anidada? Si no, ¿cómo una llamada a la función anidada busca las variables locales?
Sé que encontrarse con este tipo de problemas generalmente significa que uno 'lo está haciendo mal', pero me gustaría entender qué sucede.
Try 'por animal en [ 'gato', 'perro', 'vaca'] '. Sin embargo, estoy seguro de que alguien vendrá y me explicará esto, es uno de esos de Python gotcha :) –