Простой способ превратить генератор в понимание списка без дублирования кода в Python?

У меня есть что-то вроде этого:

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 есть некоторая функция, называемая дескриптором, которая может использоваться для модифицированных функций, не касаясь тела функции. Подходит ли это в этом случае? Если да, то как его использовать здесь?

2 ответа

Просто позвони list() в генераторе для этих случаев вам нужен материализованный результат:

gen = TransMach(mfile, sfile)
lines = list(gen)

Призвание list() на генераторе превращает его в обычный список.

Другие вопросы по тегам