所以我想制作一个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?
答案 0 :(得分:5)
你可以把它变成一个类。
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