воскресенье, 22 марта 2015 г.

Python генераторы.

Продолжаю вникать в тонкости Python-а. Разглядывал как-то свой код и понял, что он не очень... в смысле совсем "не очень". А штука в том, что он хоть и написан на Python-е, но не полноценно питоновский. Что это значит? Да всё очень просто. По многолетней привычке я пишу:
result = list()
for itm in items:
    i = dict()
    i['Name'] = itm.name
    i['ItemID'] = itm.item_id
    result.append(i)
return result

Вот, код работает, но... я задумался, вспомнил что читал о Python-е, вспомнил про такую штуку как генераторы. Сказал себе: "Хмммм..." и, покопавшись в доках, написал:

return [{'Name': i.name, 'ItemID': i.item_id} for i in items]

Разница, как говорится, налицо. Код гораздо компактнее, понятнее и доки утверждают, что генераторы в Python работают быстрее циклов.

Генерировать можно не только списки. Словари тоже можно и это тоже очень просто:

result = { i.name: i.item_id for i in items}

Тут генератор возвращает словарь у которого name - это ключ, а item_id - значение. Примеры очень простые, но генераторы в Python очень мощная и гибкая штука и могут создавать довольно сложные объекты.

Комментариев нет:

Отправить комментарий