Skip to content

Python: трюки с генераторами Заключение

Dmitry Ponyatov edited this page Oct 5, 2019 · 3 revisions

Python: трюки с генераторами

Заключение

Большая идея

  • Генераторы являются невероятно полезным инструментом для решения различных «системных» проблем
  • Сила исходит от возможности постройки конвейеров обработки данных
  • Можно создавать компоненты, которые подключаются к конвейеру как части многократного использования
  • Можно расширить идею конвейера во многих направлениях (сеть, потоки, сопрограммы)

Code Reuse

  • Мне нравится способ повторного использования кода с генераторами
  • Небольшие компоненты, которые просто обрабатывают поток данных
  • Лично я думаю, что это намного проще, чем то, что вы обычно видите с OO-шаблонами.

Пример

  • Модуль SocketServer (шаблон стратегии)
import socketserver
class HelloHandler(socketserver.BaseRequestHandler):
    def handle(self):
        self.request.sendall(b"Hello World\n")

serv = SocketServer.TCPServer(("",8000),HelloHandler)
serv.serve_forever()
  • генераторная версия
for c,a in receive_connections(("",8000)):
    c.send(b"Hello World\n")
    c.close()

Ловушки

  • Использование этого стиля программирования для непосвященных может привести к взрыву головы
  • Обработка ошибок сложна, потому что у вас есть много компонентов, соединенных вместе
  • Необходимо уделять пристальное внимание отладке, надежности и другим вопросам.

Спасибо!

  • Я надеюсь, что из этого курса у вас появились новые идеи
  • Пожалуйста, не стесняйтесь обращаться ко мне
    Web: http://www.dabeaz.com\ Twitter: @dabeaz
Clone this wiki locally