给Python生成器添加成员变量/方法?

6 投票
2 回答
851 浏览
提问于 2025-04-15 17:15

我可以给Python生成器添加一个成员变量或方法吗?

我想要的效果是这样,可以“窥视”成员变量j:

def foo():
    for i in range(10):
        self.j = 10 - i
        yield i

gen = foo()
for k in gen:
    print gen.j
    print k

是的,我知道我可以每次都返回i和j。但是我不想这样做。我想在生成器内部查看一个局部变量。

相关问题:

2 个回答

2

我觉得这个方法不好看,但应该能满足你的需求。不过我更喜欢每次都返回 i 和 j,这样更好 :-)

class Foo(object):
    def foo(self):
        for i in range(10):
            self.j = 10 - i
            yield i

genKlass = Foo()
gen = genKlass.foo()
for k in gen:
    print genKlass.j
    print k
9

你可以创建一个对象,并操作它的 __iter__ 接口:

class Foo(object):
    def __init__(self):
        self.j = None
    def __iter__(self):
        for i in range(10):
            self.j = 10 - i
            yield i

my_generator = Foo()

for k in my_generator:
    print 'j is',my_generator.j
    print 'k is',k

输出结果是:

j is 10
k is 0
j is 9
k is 1
j is 8
k is 2
j is 7
k is 3
j is 6
k is 4
j is 5
k is 5
j is 4
k is 6
j is 3
k is 7
j is 2
k is 8
j is 1
k is 9

撰写回答