TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки
Python Заметки avatar

TGINSIGHT POST

Post #68

@pythonotes

Python Заметки

Прегледи787Број на прегледи
Објавено13 апр.13.04.2020 г., 09:00
Содржина

Содржина на објавата

В предыдущем посте мы запускали нужную нам функцию внутри генератора списка. Выглядит странно, когда мы не сохраняем результат этого генератора, так как обычно нужен именно он. Обычно, в таких случаях более наглядно смотрится функция map(): array = [1, 2, 3, 4, 5, 6, 7, 8, 9] more, less = [], [] map(lambda x: [less.append, more.append][x>5](x), array) Проверяем результат >>> print(more, less) [] [] Хм, не сработало! Что произошло? Почему итерация не запустилась? Дело в том, что в Python3 многие итеративные функции (если не все) стали генераторами. А что такое генератор? Это не тот генератор списка который List Comprehensions, а именно Generator. Объект, который внутри себя имеет алгоритм получения следующего элемента и он не станет запускать итерацию пока мы не начнём запрашивать эти элементы. Что возвращает функция map()? >>> print(map(...)) <map object at 0x0000023114ADE3C8> Тоже самое произошло и с функцией range >>> print(range(10)) range(0, 10) Значит всё что остаётся, это запустить итерацию по элементам генератора. Как это сделать максимально коротко? Можно просто в цикле for for _ in map(...): pass Либо конвертнуть в список list(map(...)) Или оператором * [*map(...)] Ну а полностью будет выглядеть так [*map(lambda x: [less.append, more.append][x>5](x), array)] Теперь генератор сразу вычисляется. Хотя, как по мне, такая запись менее "читабельна") #tricks