Как вы получите доступ к локальной переменной, определенной внутри генератора Python, из-за пределов генератора?
У меня есть случай, когда мой генератор манипулирует локальным состоянием, и для юнит-тестов я хочу проверить это состояние, чтобы убедиться,содержит правильные значения.
Я не могу сохранить состояние в переменной экземпляра (например, self.state = blah), поскольку я могу создавать несколько генераторов из одного экземпляра класса, то есть генераторы могут перезаписывать состояние друг друга.Я также не могу вернуть состояние в выражении yield, потому что имя состояния может меняться или изменяться из-за отдельных экземпляров генератора.
например, я хочу сделать что-то подобное (хотя этот код не работает)
from random import random
class MyIter(object):
def __iter__(self):
context = {}
for i in xrange(10):
context[random()] = random()
yield i
obj = MyIter()
i1 = iter(obj)
i2 = iter(obj)
while 1:
try:
i1.next()
i2.next()
print i1.context
print i2.context
except StopIteration:
break
Есть ли в любом случае доступ к локальным переменным путем проверки стека выполнения Python?