gpt4 book ai didi

python - 在 Python 生成器中访问局部变量

转载 作者:太空狗 更新时间:2023-10-30 00:08:29 25 4
gpt4 key购买 nike

如何从生成器外部访问 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 的执行栈来访问局部变量?

最佳答案

很抱歉回答我自己的问题,但在深入了解生成器界面后,我找到了访问生成器局部变量所需的确切路径:

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.gi_frame.f_locals['context']
print i2.gi_frame.f_locals['context']
except StopIteration:
break

关于python - 在 Python 生成器中访问局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4736470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com