有没有办法添加/修改使用yield创建的生成器的属性?

发布于 2024-12-19 01:40:22 字数 505 浏览 0 评论 0原文

所以我想制作一个 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?

So I wanted to make an arff reader (similar to csv file format).

And I wanted to use yield to make an iterator but also to add attributes to this iterator.

eg:

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

but in the reader definition:

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

Is there a way to do this using yield or am I stuck with the iterator api?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

假装爱人 2024-12-26 01:40:22

你可以把它变成一个类。

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

You can make it a class.

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文