Функции и генераторы
Разбор Д/З №2
Условное выражение A if C else B
Цикл for: повторение
iter(объект) → объект-итератор (.__getitem__() или .__iter__())
next() и StopIteration
range(), reversed(), enumerate(), zip()
Кстати, zip() не было, а зря!
Функции
Пространства имён: повторение
Задание функции: формальные и фактические параметры, return
Duck typing: функция как формализация алгоритма
функция как локальное пространство имён
определение локальности по связыванию, global
nonlocal для вложенных функций
- функция как объект: именование, передача в качестве параметра
- лямбда-функции (функции-выражения)
Распаковка и запаковка последовательностей
- при связывании
в цикле for
- при передаче параметров в функцию
- распаковка
- запаковка
- функция с произвольным числом параметров
Генераторы
Повторно-входимые функции as is
Pуthon3: генераторы
Задание: yield
- Принцип работы
- это же итератор!
Д/З
Прочитать про функции, итераторы и генераторы в учебнике
Как одним print()-ом вывести все элементы произвольного кортежа Python3 через пробел?
- Придумать пример «из жизни» для вложенного задания функции
EJudge: Det4x4 'Определитель матрицы 4×4'
Матрица 4×4 задаётся кортежем из 4 кортежей по 4 целых числа в каждом. Посчитать определитель этой матрицы. Допустимо заранее составить (а не вычислять на ходу) последовательность из всех перестановок индексов и знаков этих перестановок.
(5, -4, 4, -7), (1, -2, 6, 0), (3, -8, -6, -4), (-1, 2, -9, 3)
702
EJudge: EvalFunction 'Сложение и умножение'
Ввести строку, содержащую выражение ЯП Python3. В строке, помимо стандартных действий над объектами, может встречаться вызов функции Add(a,b) (возвращает сумму a и b) и Mul(a,b) (возвращает произведение a и b). Вычислить и вывести значение этого выражения.
Mul(Add(-2,5),Add((1,2),(100,500)))[3:]
(500, 1, 2, 100, 500, 1, 2, 100, 500)
EJudge: IterPi 'Расстояние от Пи'
Пользуясь формулой Лейбница для вычисления числа Пи:
написать бесконечный генератор pigen(), возвращающий последовательно 4, 4-4/3, 4-4/3+4/5, …; ввести некоторое расстояние E и вывести номер элемента этой последовательности, первым попадающего в E/2-окрестность числа Пи. Внимание! Тесты написаны из расчёта, что проверка такая: как только очередное значение pigen() по модулю перестанет отличаться от предыдущего значения больше, чем на E, выводим, на каком обороте цикла это произошло.
0.001
2000
EJudge: GenTriseq 'Повторитель'
Ввести кортеж целых чисел V, затем число N. Написать генератор, возвращающий сначала все числа из кортежа (в порядке следования), не превосходящие его нулевой элемент, затем все числа, не превосходящие первый, и т. д. вплоть до последнего элемента. Вывести N-й элемент этой последовательности, или "NO", если таковой не существует.
10, 10, 1, 7, 8, 0, 5 10
7