Добавить членскую переменную / метод к генератору Python?

Я могу добавить членскую переменную / метод к генератору 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 каждый раз. Но я не хочу делать это. Я хочу посмотреть на локальное в генераторе.

6
задан Joseph Turian 21 December 2009 в 20:10
поделиться

2 ответа

Вы можете создать объект и управлять интерфейсом __ 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
9
ответ дан 9 December 2019 в 22:35
поделиться

Я считаю это некрасивым, но он должен делать то, что вы хотите. Я бы предпочел возвращать i AND 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
2
ответ дан 9 December 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: