Tamam, bu konuda benimle konuş, korkunç bir şekilde kıvrılmaya başlayacağını biliyorum, ama lütfen bana neler olduğunu anlatayım.Python iç içe geçmiş işlevlerindeki yerel değişkenler
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()
verir:
cow: Mary pets the cat.
dog: Mary pets the cat.
cat: Mary pets the cat.
Yani temelde, neden üç farklı hayvanları alamıyorum? cage
iç içe geçmiş işlevin yerel kapsamına 'dahil değil mi? Değilse, iç içe geçmiş işleve yapılan çağrı yerel değişkenlere nasıl bakar?
Bu tür problemlerle karşılaşmanın genellikle birinin 'yanlış yaptığı' anlamına geldiğini biliyorum, ancak ne olduğunu anlamak istiyorum.
deneyin'. .. Eminim birisi bir araya gelip bunu açıklayacaktır - bu Python gotcha'nın :) –