04. Функции и замыкание
- Функция как именованная запись алгоритма
- duck typing
- пространство имён и pythontutor.com
- вызов одной функции из другой
написать примитивно-рекурсивную функцию на 4 вызова, пронаблюдать как она работает
(придумать) Задача_0. Простая задача типа «написать функцию, в потом проверить её»
- лямбда-функции (функции-выражения)
как работает sorted(…, key=fun)
переписать Задачу_2 из прошлого семинара в однострочник с использованием sorted():
- ввести и отсортировать по возрастанию ключей числовой список, в качестве ключа сравнения использовать остаток от деления x2 на 100
(если надо — пере/доформулировать) Задача_1: Написать функцию вычитания двух объектов, которая должна, помимо вычитания того, что и так вычитается, вычитать некоторые хранимые последовательности (по правилам множеств, т. е. если элемент есть в вычитаемом хотя бы раз, то он не встречается в разности); порядок элементов и тип результата должен быть сохранён. В качестве примера вычесть целые, вещественные, множества, кортежи и строки.
- Подсказки:
- составить множество типов последовательностей, для которых нужно имитировать вычитание, и проверять в нём
как работает type(object)()?
- строка обрабатывается чуть-чуть не так (но есть вариант, когда так же)
- Подсказки:
(доформулировать) Задача_2 (на рекурсию): Реализовать функцию бинарного поиска в упорядоченной индексируемой хранимой последовательности
- Проверить её на строках и кортежах
- Замыкание: как образуется, почему изнутри это не так просто, как снаружи?
- Разбор примера про adder-ы из лекций
Функуционал: на вход две функции от одной переменной (f(x) и g(x)) , на выходе — функция от одной переменой h(x)=f(x)+g(x)
Задача_3: Функционал-еval()-ище. Написать функцию calc(s, t ,u), которой передаются три строки. Каждая строка — это формула; s и t — над одной переменной x, а u — над двумя переменными x и y. Возвращается функция, которая по заданному x вычисляет u(s(x), t(x)).
Например, calc("x", "2*x+1", "x/y") должно возвращать функцию, которая вычисляет $$x / {2x+1}$$