【发布时间】:2011-01-19 14:38:43
【问题描述】:
如何从生成器外部访问定义在 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 的执行堆栈来访问局部变量?
【问题讨论】:
标签: python scripting iterator generator