TwiddleLab / Код / Строим на Python
Функции, которые вызывают функции
Что ты узнаешь
- Декомпозиция: разбей большую задачу на маленькие именованные функции, которые вызывают друг друга.
- Каждый вызов кладёт карточку на стек вызовов со своими коробками; return снимает её и несёт значение обратно.
- Переменные внутри функции локальные: x в функции это другая коробка, чем x снаружи.
- f(g(x)) сначала выполняет g, потом отдаёт его ответ f.
Как идёт урок
Проверка пароля, написанная двумя способами. Найди проверку цифры в каждом.
Нажми на строку, которая проверяет цифру. Секундомер засекает время.
is_valid вызывает двух помощников. Какая функция закончит первой?
Прочитай код и нажми на функцию.
Пройди по шагам. Смотри на стопку карточек.
Вызов кладёт карточку наверх. return снимает её.
Декомпозиция и стек вызовов.
Декомпозиция значит разбить задачу на маленькие функции с понятными именами. Каждая делает одно дело.
Стек вызовов это стопка карточек. Вызов кладёт наверх новую карточку с коробками этой функции; return снимает верхнюю карточку и несёт значение вниз, вызвавшему.
Коробки, созданные внутри функции, локальные: они живут на её карточке и исчезают при возврате.
Поработай стеком сам.
Перед каждым вызовом перетащи нужную карточку на стек. Перед каждым возвратом сними верхнюю.
Собери is_valid из двух помощников.
Пароль годится, если он достаточно длинный и в нём есть цифра. Расставь строки по порядку; пройдут четыре теста.
Две машины-функции подряд. Найди x, чтобы верхняя цепочка дала 11.
Внутренний вызов выполняется первым. Посмотри и на другой порядок.
Испытание паролей: хакер атакует твою is_valid.
Для каждого пароля нажми «пройдёт» или «не пройдёт», прежде чем сработает функция.
Две коробки с именем x. Какую покажет print(x)?
Программа на паузе внутри bump. Нажми на коробку, которую напечатает строка 6.
Тизер: функция, которая вызывает сама себя.
Сколько карточек будет на стеке в самый высокий момент? Поставь булавку и нажми «Запуск».
Предыдущий урок: Отладка как детектив · Следующий урок: Случайность и симуляция · Часть курса: Строим на Python
Уроки интерактивные и работают на JavaScript. Включи его, чтобы играть.