Простой способ превратить генератор в понимание списка без дублирования кода в 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()
на генераторе превращает его в обычный список.