Skip to content
This repository has been archived by the owner on Jun 26, 2019. It is now read-only.

Latest commit

 

History

History
45 lines (32 loc) · 4.18 KB

Lecture11.md

File metadata and controls

45 lines (32 loc) · 4.18 KB

Лекция 11

Все слайды тут.

Итераторы и итерируемые

Слайды 3-10:

  • В Питоне можно итерировать по объектам разных классов.
  • Общее у этих разных классов то, что все они итерируемые (iterables).

Слайд 12:

  • Чтобы сделать итерируемый класс, достаточно реализовать в нем «магический» метод __iter__, который будет возвращать итератор.

Слайд 13:

  • Чтобы сделать итератор, нужно сделать класс с двумя «магическими» методами. Метод __next__ будет возвращать объект, который нужно вернуть следующим, метод __iter__ будет возвращать итератор (то есть, например, self).
  • Интересность заключается в том, что правило, по которому __next__ возвращает следующий объект, можно задать произвольно.
  • Когда элементы закончились, нужно кинуть исключение StopIteration.

Слайды 14-21:

  • Это пример итератора, который, начиная с конца, в качестве следующего элемента возвращает предыдущий по порядку.

Слайды 22-23:

  • А это пример итерируемого класса. Когда мы его объект будем проходить с помощью for in, элементы будут возвращаться в обратном порядке (конечно, достичь той же цели можно и другими способами).
  • Стоит потренироваться писать свои итераторы. Сделать не трудно, а на собеседованиях спрашивают.

Генераторы

Слайд 26:

  • Генераторы задумывались как синтаксический сахар, который позволяет не писать неудобные __iter__ и __next__.

Слайд 27:

  • О генераторах полезно думать, как о функциях, которые запонимают свое состояние во время выхода.
  • Так, функция с двумя идущими подряд операторами yield при первом выозове остановится на первом, а при втором — на втором.

Слайд 30:

  • Generator expressions — это более короткий способ написать генератор.

Обо всяком

Слайды 33-37:

  • Еще существует items().
  • Главная причина использовать dict views — это то, что они не копируют ни ключи, ни элементы словаря, когда вы их вызываете.

Слайды 38:

  • То, что sort() сортирует «на месте» в том числе означает, что сама sort() возвращает None и при этом модифицирует список.
  • Алгоритм, который Питон использует для сортировки, называется Timsort. Он является производным от Mergesort.