2

我有这样的事情:

class TransMach:
    def __init__(self, machfile, snpfile):
        self.machfile = machfile
        self.snpfile = snpfile

    def __translines(self):
        fobj = open(self.machfile)
        lines = (l.strip().split()[2] for l in fobj)
        tlines = zip(*lines)
        return tlines

生成器用于避免将整个文件读入内存,但有时读取整个文件正是我们所希望的(即列表理解)。如何在没有太多额外代码的情况下改变这种行为?目标是能够在这两种模式之间进行选择。我听说python有一些叫做descriptor的特性,可以用来修改函数而不接触函数体,在这种情况下是否合适?如果是,这里应该如何使用?

4

2 回答 2

8

只需list()在需要具体化结果的情况下调用生成器:

gen = TransMach(mfile, sfile)
lines = list(gen)
于 2013-08-06T11:08:22.080 回答
3

调用list()生成器会将其转换为普通列表。

于 2013-08-06T11:09:34.613 回答