Доступ к локальным переменным внутри генератора Python

Как бы вы могли получить доступ к локальной переменной, определенной внутри генератора 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

Is есть ли способ получить доступ к локальным переменным, проверив стек выполнения Python?

6
задан Cerin 19 January 2011 в 14:38
поделиться