⇤ ← Версия 1 от 2020-10-20 11:42:34
2767
Комментарий:
|
2949
|
Удаления помечены так. | Добавления помечены так. |
Строка 59: | Строка 59: |
## * <<EJCMC(148, )>> ## * <<EJCMC(148, VirtualTurtle, Примитивная черепашка)>> * <<EJCMC(148, VirtualTurtle, Примитивная черепашка)>> |
Итераторы
Итераторы вокруг нас
Вычислимые последовательности.
Как задать самому? Например, циклической сборкой, см. пример выше
iterator object, next(), StopIteration
протокол последовательности: методы .__getitem__() или .__iter__()
iter() от всего подряд
⇒ работа цикла for: сделать итератор и по нему ходить
Генераторы
Создание и использование генератора, (yield ⇒ функция, возвращающая генератор, а уж генератор yield-ит результаты)
Пример работы, return в генераторе
- Генератор — «одноразовая» последовательность
Параметрические генераторы
В генератор можно затолкать значение на каждом обороте (оно прочтётся yield-ом).
1 >>> def biased(init):
2 ... bias = yield init
3 ... while bias:
4 ... init += bias*2+1
5 ... bias = yield init
6 ...
7 >>> g = biased(10)
8 >>> next(g) # или, что то же самое, g.send(None)
9 10
10 >>> g.send(5)
11 21
12 >>> g.send(5)
13 32
14 >>> g.send(-1)
15 31
16 >>> g.send(100500)
17 201032
18 >>> g.send(0)
19 Traceback (most recent call last):
20 File "<stdin>", line 1, in <module>
21 StopIteration
Первый вызов — только next() (ещё ничего не передали), остальные — .send()
при этом next() означает .send(None)
Зачем это может быть нужно??
- асинхронные возможности
Itertools (сколько успеем)
Бесконечные последовательности и частичные вычисления, itertools
- Обработка вычислимых последовательностей
- функциональное программирование
- Обзор
- Бесконечные последовательности
- Модификация последовательностей
- Комбинаторика
Д/З
- Прочитать
Про итераторы и генераторы в учебнике
Про итераторы и генераторы в справочеике
TODO
EJudge: VirtualTurtle 'Примитивная черепашка'
Написать параметрический генератор turtle(coord, direction), описывающий движение «черепахи» по координатной плоскости. coord — это кортеж из двух целочисленных начальных координат, direction описывает первоначальное направление (0 — восток, 1 — север, 2 — запад, 3 — юг). Координаты увеличиваются на северо-восток. Генератор принимает три команды — "f" (переход на 1 шаг вперёд), "l" (поворот против часовой стрелки на 90°) и "r" (поворот по часовой стрелке на 90°) и возвращает текущие координаты черепахи.
1 0 1 0 1 1 1 1 2 1 3 1 3 1 3 0 3 -1 3 -1