Продолжаю вникать в тонкости Python-а. Разглядывал как-то свой код и понял, что он не очень... в смысле совсем "не очень". А штука в том, что он хоть и написан на Python-е, но не полноценно питоновский. Что это значит? Да всё очень просто. По многолетней привычке я пишу:
Вот, код работает, но... я задумался, вспомнил что читал о Python-е, вспомнил про такую штуку как генераторы. Сказал себе: "Хмммм..." и, покопавшись в доках, написал:
Разница, как говорится, налицо. Код гораздо компактнее, понятнее и доки утверждают, что генераторы в Python работают быстрее циклов.
Генерировать можно не только списки. Словари тоже можно и это тоже очень просто:
Тут генератор возвращает словарь у которого name - это ключ, а item_id - значение. Примеры очень простые, но генераторы в 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 очень мощная и гибкая штука и могут создавать довольно сложные объекты.
Комментариев нет:
Отправить комментарий