Все статьи | Дневник студента

Отзыв на урок №8 и упражнение к нему в курсе "Python: Функции"

Статья написана студентом Хекслета. Мнение автора может не совпадать с позицией редакции
Отзыв на урок №8 и упражнение к нему в курсе "Python: Функции" главное изображение

Отзыв на урок №8 и упражнение к нему в курсе "Python: Функции"

Причины написания отзыва:

  1. Ощущения от курса "Python: Функции" и особенно от урока №8 сильно контрастируют с ощущениями от всех ранее пройденных курсов в рамках профессии "Python-разработчик". И не в пользу упомянутого урока.

  2. На решение простого (как после выяснилось) упражнения у меня ушло около трёх часов.

  3. Ранее для решения упражнения мне хватало приведённой в уроке и ранее разобранной теории, или в крайнем случае прибегал к дополнительным материалам, ссылки на который есть в материалах урока или курса. В этом уроке так не получилось. Да и дополнительных материалов к уроку и к курсу в целом нет.

Содержание урока:

В уроке рассматривается тема "Замыканий" — это такой способ работать с функциями внутри функций в Python. А также приведены примеры работы данных "замыканий". Примеров всего три, и они иллюстрируют процессы работы с функциями одной переменной.

Содержание упражнения:

Далее прямое цитирование:

В этом упражнении вам нужно будет реализовать две функции высшего порядка, возвращающие замыкания: partial_apply() и flip().

partial_apply() принимает функцию от двух аргументов и первый аргумент для неё, а возвращает замыкание — функцию, которая примет второй аргумент и наконец применит замкнутую функцию к обоим аргументам (и вернёт результат).

def greet(name, surname):
    return f'Hello, {name} {surname}!'

f = partial_apply(greet, 'Dorian')
f('Grey')
# 'Hello, Dorian Grey!'

Функция flip() принимает в качестве единственного аргумента функцию от двух аргументов. Возвращаемое замыкание должно также принять два аргумента, а затем применить к ним замкнутую функцию, но аргументы подставить в обратном порядке. Таким образом flip() как бы "переворачивает" ("flips") исходную функцию.

def greet(name, surname):
    return f'Hello, {name} {surname}!'

f = flip(greet)
f('Christian', 'Teodor')
# 'Hello, Teodor Christian!'_

Ощущения от урока и упражнения:

  1. После прочтения урока складывается ощущение, что речь идёт о каком-то не очень нужном и малополезном функционале языка Python. Нет примера или описания, который мог бы проиллюстрировать зачем мне понадобится данный функционал в моей будущей работе. А еще в конце урока слова "… не является эксклюзивным для Python "костылём"…" закрепляют ощущения.

  2. Язык, которым написан урок и упражнение к нему ощущается, как диалог двух профессионалов, для которых очевиден контекст и нюансы. То есть мне, как читателю, должно быть и так всё понятно. Но, честно говоря, понятно оказалось не всё и не сразу.

  3. Не сложное на первый взгляд упражнение приводит в ступор при решении. Понимаешь, что решение должно занять несколько строк, что оно не сложное… и не решаешь и всё тут. Перечитываешь теорию, копируешь в VS Code примеры и по-всякому крутишь их в надежде понять, ищешь дополнительные материалы в курсе, а их нет… Гуглишь и не находишь с первых попыток примеров, отличных от приведённых в уроке… Начинаешь чувствовать себя "туповатым"… Злишься на курс…

  4. А вот когда нашел решение, вот тут прям ярость охватывает. Решение действительно простое. А вот примера или текста урока, который направил бы к этому решению нет. И да, это моё личное мнение и ощущение, возможно у вас всё было иначе.

Поиск решения:

  1. Сперва попытался в лоб решить и вызвал функцию greet(name, surname) непосредственно в созданной функции partial_apply(), рассчитывая, что замыканием будет сама функция greet(). Но так оно не работает…

  2. Перечитав ещё раз теорию я решил воспользоваться приведёнными примерами и создал функцию greet(name, surname) внутри функции partial_apply(). Такая конструкция выводила правильный результат (соответствующий приведённому в упражнении), но тесты не проходила. Оно и понятно, так как в задании подразумевалось, на входе функция partial_apply() должна в виде данных принимать внешнюю функцию от двух переменных и один параметр. Полез разбираться в тестах (вот тут отдельное спасибо за понятно написанные тесты).

  3. Взял данные из тестов и уже с ними стал громоздить разнообразные конструкции, действую в парадигме того, что замыканием должна быть именно вызываемая функция. Ничего не получалось. Полез "гуглить". В основном попадались примеры, аналогичные приведённым в уроке, то есть конструкции из функций от одной или двух переменных в виде параметров. Через некоторое время наткнулся на видеоуроки с Ютуба Замыкания в Python. Closure Python (https://www.youtube.com/watch?v=lA979PBb0TY&ab_channel=egoroff_channel) и Замыкания в Python Часть 2. Closure Python part 2 (https://www.youtube.com/watch?v=vrkLShOYwI0&ab_channel=egoroff_channel). И вот к концу второго видеоурока я начал понимать, что именно я делаю не так.

  4. В задании надо просто в теле функции partial_apply() создать функцию "замыкание", в которой уже и вызвать внешнюю функцию greet(). Вроде как "ларчик просто открывался", но это простое знание вот ни как мне не удалось вытащить из урока №8. И дополнительных материалов к уроку нет, что вынуждает "блуждать по интернету" в поисках и сомнениях. Развитие навыка самостоятельного поиска, конечно, тоже важно, но почему-то именно в этом уроке оно начало проявляться, в отличии от ранее пройденных мною 14 курсах на Хекслете. Раньше справлялся теми материалами, которые даны в уроке и в приложениях.

Все вышеописанные действия происходили в несколько подходов и в сумме заняли около трёх часов.

Пожелания:

Уважаемые разработчики курсов Хекслет, у вас получается делать по-настоящему классный образовательный продукт, но курс "Python: Функции" и особенно урок №8 вызвал у меня сильные отталкивающие чувства. Прошу Вас переработать курс. На мой взгляд в курс необходимо добавить дополнительные материалы, упростить язык повествования (сделать его более доступным к пониманию без контекста) и добавить больше разобранных примеров. Не сомневаюсь, что у вас получится сделать его на уровне с остальные замечательными курсами.

Аватар пользователя Антон Тюрин
Антон Тюрин 30 ноября 2022
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
с нуля
Разработка фронтенд-компонентов для веб-приложений
9 февраля 10 месяцев
Иконка программы Онлайн-буткемп. Фронтенд-разработчик
Профессия
Новый с нуля
Интенсивное обучение профессии в режиме полного дня
9 февраля 4 месяца
Иконка программы Python-разработчик
Профессия
с нуля
Разработка веб-приложений на Django
9 февраля 10 месяцев
Иконка программы Java-разработчик
Профессия
с нуля
Разработка приложений на языке Java
9 февраля 10 месяцев
Иконка программы PHP-разработчик
Профессия
с нуля
Разработка веб-приложений на Laravel
9 февраля 10 месяцев
Иконка программы Инженер по тестированию
Профессия
с нуля
Ручное тестирование веб-приложений
9 февраля 4 месяца
Иконка программы Node.js-разработчик
Профессия
с нуля
Разработка бэкенд-компонентов для веб-приложений
9 февраля 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
с нуля
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
9 февраля 16 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
c опытом
Создание веб-приложений со скоростью света
9 февраля 5 месяцев
Иконка программы Верстальщик
Профессия
с нуля
Верстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Аналитик данных
Профессия
В разработке с нуля
Сбор, анализ и интерпретация данных
16 марта 8 месяцев