Найти - Пользователи
Полная версия: Использования промежуточных значений в генераторах
Начало » Python для экспертов » Использования промежуточных значений в генераторах
1 2 3
Budulianin
PooH
Разуйте глаза,
lines = (line for line in open('/some/file'))
splited_lines = (line.split() for line in lines)

splited_lines = (line.split() for line in open('/some/file'))
scopichol
Что не годится? Разуйте глаза, там нет списков, там генераторы, список появляется в последний момент из уже отфильтрованных данных.
Разул. Согласен.
Shaman
Почему-то никто не вспомнил о yield.
Budulianin
Shaman
Почему-то никто не вспомнил о yield.
У тс список.
Shaman
Budulianin
У тс список.
Не понял. Какая разница?
Берём твой код и чуть его модифицируем
def gen(arg):
    for line in arg:
        line_sp = line.split()
        if line_sp[2] == 'var1' and line_sp[3] == 'var2':
            yield line_sp[2:]

Теперь его можно использовать в двух вариантах:
text = '''aaaa bbbb cccc dddd
aaaa bbbb var1 var2'''.split('\n')
# case 1
print [i for i in gen(text)]
# case 2
for i in gen(text):
    print i
Budulianin
Shaman
Не понял. Какая разница?

Если так
[i for i in gen(text)]
, то никакой.
Shaman
На таких yield генераторах вся стандартная библиотека зиждется.
Budulianin
Shaman
На таких yield генераторах вся стандартная библиотека зиждется.
И ?
Shaman
Значит в них что-то есть.
Budulianin
Shaman
Значит в них что-то есть.
:)
Просто память экономят.
Если можно использовать генератор, то лучше использовать генератор.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB