Функции и генераторы
Разбор Д/З №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'
Input:Матрица 4×4 задаётся кортежем из 4 кортежей по 4 целых числа в каждом. Посчитать определитель этой матрицы. Допустимо заранее составить (а не вычислять на ходу) последовательность из всех перестановок индексов и знаков этих перестановок.
Output:(5, -4, 4, -7), (1, -2, 6, 0), (3, -8, -6, -4), (-1, 2, -9, 3)
702
EJudge: EvalFunction 'Сложение и умножение'
Input:Ввести строку, содержащую выражение ЯП Python3. В строке, помимо стандартных действий над объектами, может встречаться вызов функции Add(a,b) (возвращает сумму a и b) и Mul(a,b) (возвращает произведение a и b). Вычислить и вывести значение этого выражения.
Output:Mul(Add(-2,5),Add((1,2),(100,500)))[3:]
(500, 1, 2, 100, 500, 1, 2, 100, 500)
EJudge: IterPi 'Расстояние от Пи'
Input:Пользуясь формулой Лейбница для вычисления числа Пи:
написать бесконечный генератор pigen(), возвращающий последовательно 4, 4-4/3, 4-4/3+4/5, …; ввести некоторое расстояние E и вывести номер элемента этой последовательности, первым попадающего в E/2-окрестность числа Пи. Внимание! Тесты написаны из расчёта, что проверка такая: как только очередное значение pigen() по модулю перестанет отличаться от предыдущего значения больше, чем на E, выводим, на каком обороте цикла это произошло.
Output:0.001
2000
EJudge: GenTriseq 'Повторитель'
Input:Ввести кортеж целых чисел V, затем число N. Написать генератор, возвращающий сначала все числа из кортежа (в порядке следования), не превосходящие его нулевой элемент, затем все числа, не превосходящие первый, и т. д. вплоть до последнего элемента. Вывести N-й элемент этой последовательности, или "NO", если таковой не существует.
Output:10, 10, 1, 7, 8, 0, 5 10
7
