Скидки до 20% + 2-ая профессия бесплатно и подарки на 50 000₽

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

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

Время чтения статьи ~5 минут
Статья написана студентом Хекслета. Мнение автора может не совпадать с позицией редакции
Отзыв на урок №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
6
Похожие статьи
Рекомендуемые программы
профессия
Верстка на HTML5 и CSS3, Программирование на JavaScript в браузере, разработка клиентских приложений используя React
10 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на Python, Разработка веб-приложений и сервисов используя Django, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
Тестирование веб-приложений, чек-листы и тест-кейсы, этапы тестирования, DevTools, Postman, SQL, Git, HTTP/HTTPS, API
4 месяца
с нуля
Старт 26 декабря
профессия
Программирование на Java, Разработка веб-приложений и микросервисов используя Spring Boot, проектирование REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
новый
Google таблицы, SQL, Python, Superset, Tableau, Pandas, визуализация данных, Anaconda, Jupyter Notebook, A/B-тесты, ROI
9 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на PHP, Разработка веб-приложений и сервисов используя Laravel, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на Ruby, Разработка веб-приложений и сервисов используя Rails, проектирование и реализация REST API
5 месяцев
c опытом
Старт 26 декабря
профессия
Программирование на JavaScript в браузере и на сервере (Node.js), разработка бекендов на Fastify и фронтенда на React
16 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на JavaScript, разработка веб-приложений, bff и сервисов используя Fastify, проектирование REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
новый
Git, JavaScript, Playwright, бэкенд-тесты, юнит-тесты, API-тесты, UI-тесты, Github Actions, HTTP/HTTPS, API, Docker, SQL
8 месяцев
c опытом
Старт 26 декабря