Есть ли способ добавить / изменить атрибуты генераторов, которые были созданы с помощью yield? - PullRequest
2 голосов
/ 01 декабря 2011

Итак, я хотел сделать arff reader (аналог формата файла CSV).

И я хотел использовать yield для создания итератора, а также для добавления атрибутов к этому итератору.

например:

data = arff.reader(my_fname)
print data.relation
for row in data:
    print row

но в определении читателя:

def reader(fname):
    reader.relation = fname # this is assigned to the function, not the generator
    yield 1
    yield 2

Есть ли способ сделать это с помощью yield или я застрял с итератором api?

1 Ответ

5 голосов
/ 01 декабря 2011

Вы можете сделать это классом.

class Reader(object): # Assuming Python <= 2.7
    def __init__(self, fname):
        self.fname = fname

    def __iter__(self):
        yield 1
        yield 2

r = Reader("some file")
print r.fname ## 'some file'
for line in r:
    print line ## 1 then 2
...