Уроки Python с нуля / #20 - Декораторы функций

Декораторы в языке Питон позволяют добавить функционал до и после выполнения определенной функции. За урок мы научимся создавать декораторы и присваивать их к функциям.
✅ Полезные ссылки:
- Урок на сайте itProger: itproger.com/course/python/20
⏰ Тайм коды:
00:00 - Начало
00:16 - Функция для открытия URL
01:45 - Простой декоратор
04:40 - Выполнение проверки
07:00 - Заключительная часть
✔ Сообщество программистов: itproger.com/
✔ -------------
Вступай в группу Вк - prog_life 🚀
Инстаграм itProger: / itproger_official
Группа FaceBook - goo.gl/XW0aaP
Instagram: / gosha_dudar
Telegram: t.me/itProger_official
Twitter - / goshadudar
- Уроки от #itProger 👨🏼‍💻
- Все уроки по хештегу #itprogerLessons

Пікірлер: 144

  • @whysocoldoutside6976
    @whysocoldoutside69762 жыл бұрын

    если Вам кто-то еще будет затирать про переполненный рынок программистов обязательно покажите им сколько набирает просмотров первое видео у курсов и сколько последнее) Гоша, огромное тебе спасибо за то, что ты делаешь! Отличный визуал, отличный звук, в основном все понятно, это просто.. шедевр?

  • @mr.doctor9429

    @mr.doctor9429

    2 жыл бұрын

    И это только вводный курс. До конца доходят вообще еденицы))

  • @user-eo9kz8ru9d

    @user-eo9kz8ru9d

    Жыл бұрын

    @@hentai-tok2942 та же история,брат

  • @MikeMentzer09

    @MikeMentzer09

    Жыл бұрын

    Я ДУМАЛ ЭТО Я ОДИН ЗАМЕТИЛ,ТЫ ДУМАЕШЬ ТОЧНО ТАКЖЕ КАК И Я

  • @Haykdzya

    @Haykdzya

    Жыл бұрын

    @@MikeMentzer09 ya toje tak dumal

  • @jcmofficialchannel

    @jcmofficialchannel

    Жыл бұрын

    я тоже заметил эту закономерность)) забавно)))

  • @MalkiaMmoja
    @MalkiaMmoja2 жыл бұрын

    Гоша, вы большой молодец, если не сказать гений. Благодарю вас за ваш труд. Даже не верится, что такое количество полезного материала сделал один человек.

  • @andrewproud126
    @andrewproud1268 ай бұрын

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

  • @nl0823

    @nl0823

    7 ай бұрын

    Чем же вы тогда занимались все эти три курса? Как успехи с утраиванием на работу?

  • @MynameisZOOM

    @MynameisZOOM

    8 күн бұрын

    Ну если ты не изучал ничего кроме этих видео уроков то знаний будет слишком мало. Там нужно знать фреймворки, дафига библиотек и тд

  • @Lola_Braun
    @Lola_Braun8 ай бұрын

    Я молодец, я справилась! Осталась только заключительная часть и отзыв. Спасибо за урок!

  • @mikeadams401
    @mikeadams4012 жыл бұрын

    За неделю посмотрел все видео. Всё понятно, кратко и без лишней воды. Большое спасибо за курс!

  • @I_shinobi_I

    @I_shinobi_I

    3 ай бұрын

    А я за 5 дней

  • @I_shinobi_I

    @I_shinobi_I

    3 ай бұрын

    Только сейчас заметил что комментарию уже два года)

  • @Intentor1
    @Intentor110 ай бұрын

    Спасибо за доходчивое объяснение!)

  • @baxtik88
    @baxtik886 ай бұрын

    Спасибо большое автору за его труд!!!!!!!

  • @user-gt2ig3ph5b
    @user-gt2ig3ph5b2 жыл бұрын

    Выжившие, сколько нас тут?

  • @Beliy_voron

    @Beliy_voron

    2 жыл бұрын

    Еще смотрю)

  • @qwertyssl

    @qwertyssl

    2 жыл бұрын

    уже закончик как 2 дня), сейчас начну html и css для django

  • @gddotop2231

    @gddotop2231

    2 жыл бұрын

    Я живой

  • @gddotop2231

    @gddotop2231

    2 жыл бұрын

    Буду ещё смотреть документацию для полного обучения и Selfedu

  • @Virusnik

    @Virusnik

    Жыл бұрын

    Даа

  • @user-np2xe2ri4x
    @user-np2xe2ri4x2 жыл бұрын

    Отличное видео, сделайте курс по PySpark, пожалуйста

  • @MrAdAmGaMeS
    @MrAdAmGaMeS Жыл бұрын

    Супер класс! Очень быстро соображаешь, мозг как движок гоночного болида, если бы была выхлопная труба от туда бы точно вырывались языки пламени

  • @user-cp5el7gv2m
    @user-cp5el7gv2m4 ай бұрын

    Не плохо бы перед темой с декораторами, объяснить, что такое замыкание.

  • @mercury1111
    @mercury1111Ай бұрын

    красавчик, все понятно объяснил

  • @olegkomlev
    @olegkomlev2 жыл бұрын

    Показан пример, в котором у декорируемой функции ровно 1 параметр. Если мы попытаемся применить этот декоратор к функции, где другое число параметров (0 или 2 или 10), то будет ошибка. Можно написать универсальный декоратор, который подойдет для функции с любым набором параметров. Нужно вместо def wrapper(url): написать def wrapper(*args, **kwargs): а вызывать функцию изнутри wrapper нужно не как func(url), а func(*args, **kwargs) Тогда декоратор будет пригоден для функций с любым количеством параметров. А еще лучше вызывать функцию return func(*args, **kwargs) Тогда декоратор можно применить даже к функциям, которые возвращают какое-то значение. А как тогда внутри wrapper проверить параметр url? Если нужно проверить именно первый параметр, то перед проверкой пишем url=args[0] А если нужно проверить параметр с именем url, то пишем url=kwargs['url']

  • @SepentiOne

    @SepentiOne

    Жыл бұрын

    Ничего не понял, но теперь код не запускается. 😎👍

  • @olegkomlev

    @olegkomlev

    Жыл бұрын

    @@SepentiOne А вы все изменения сделали? Я имел в виду ,что-то вроде такого: def validator (func): def wrapper(*args, **kwargs): print("before") func(*args, **kwargs) print("after") return wrapper @validator def print_sum(a,b): print("sum=",a+b) @validator def print3(a,b,c): print("abc",a,b,c) print_sum(1,2) print3(10,20,30) Здесь декоратор пригоден для обертывания функции с любым количеством аргументов.

  • @SepentiOne

    @SepentiOne

    Жыл бұрын

    @@olegkomlev да я нашел урок получше по декораторам, там как раз ваш способ был показан. Так что спасибо 😎👍

  • @soulevance9667

    @soulevance9667

    10 ай бұрын

    ты гений

  • @balda_hoij228
    @balda_hoij2284 ай бұрын

    ЮХУУУУУУ СПУСТЯ 2 НЕДЕЛИ Я ПРОШЛА ЭТО!!! Всем ,кто тоже дошел до конца удачи в начинаниях программирования и в 2024 году))) /p.s. благодаря этому видеоуроку я сама себя зарикролила🤫🤫🤫

  • @artwill7283

    @artwill7283

    12 күн бұрын

    Привет тебе тоже удачи

  • @benon43

    @benon43

    12 күн бұрын

    print ("u have been rickrolled :)")

  • @FILWW
    @FILWW Жыл бұрын

    Инкапсуляция *была создана для защиты* - но у создателя совсем другие планы пути на ее счет, по этому пусть просто существует как красивая аббревиатура. Спасибо за внимание)

  • @user-qx1ww8fv8r
    @user-qx1ww8fv8r2 жыл бұрын

    Привет очень классно спасибо тебе, мне 14 лет и я хочю пойти учиться на программиста, и смотрю твои уроки, продалжай в том же духе!!!

  • @eldar_2008

    @eldar_2008

    Жыл бұрын

    Лучше русский язык выучи, столько ошибок в одном предложении...... даун нормально пиши

  • @aogirimaloy

    @aogirimaloy

    Жыл бұрын

    как успехи в программировании?

  • @apav7

    @apav7

    Жыл бұрын

    забил походу, как многие

  • @AlgoVersePro

    @AlgoVersePro

    6 ай бұрын

    @@apav7 хзхз, может уже на пляже с девками кодит

  • @Myflon-Myflo_ne.r
    @Myflon-Myflo_ne.r3 ай бұрын

    Спасибо автору за бесплатный курс наконец-то это конец

  • @stasich6917
    @stasich69172 жыл бұрын

    Усвоил все за неделю, спасибо большое за хорошие уроки, которые легко понимаются

  • @gddotop2231

    @gddotop2231

    2 жыл бұрын

    Я за 3 дня

  • @apav7

    @apav7

    Жыл бұрын

    @@gddotop2231 куда устроились какая зп? небось уже сеньёры?

  • @Derek_3
    @Derek_37 ай бұрын

    5:02 Тут сразу можно вызвать функцию try: и сразу проверить

  • @Alexander__Os
    @Alexander__Os9 ай бұрын

    Единственный урок из всех где я ни хрена не понтяно что откуда и почему в этиих функциях.

  • @zipsit2315
    @zipsit23158 ай бұрын

    я бы сюда добавил отправку api запроса с помощью Curl, для проверки существования сайта подходит лучше всего.

  • @skyrepriza
    @skyrepriza2 жыл бұрын

    Очень хороший курс, но у меня ссылкк открывается в интернет експлорере, хотя браузер по умолчанию хром

  • @user-lw1xj6eh7k
    @user-lw1xj6eh7k Жыл бұрын

    Ваш сайт не открывает браузер выдаёт ошибку. Как мохно попасть на ваш сайт?

  • @user-ox5ki3ns8o
    @user-ox5ki3ns8o Жыл бұрын

    почему у меня не открывает оупен/юрл ничего? просто пишет код 0, но браузер не открывает

  • @Nik24411
    @Nik244115 ай бұрын

    Я ПРОШЕЛ БАЗОВЫЙ КУРС ПИТОНА 🚀

  • @Q_roxe
    @Q_roxe2 жыл бұрын

    Я не до конца понял как это работает,но это работает,было бы хорошо ели бы ты объяснил саму логику и принцип действия декоратора,ну а так в целом-есть пример есть вывод и самому пораскинуть мозгами можно)

  • @silvertruenoobs340

    @silvertruenoobs340

    2 жыл бұрын

    из того как это понял я)) пока только примерно, возможно где то ошибусь, если что поправьте, мы создаем функцию которая будет основной, и является своего рода флагом для быстрого обращения к ней далее в теле проекта. Внутри этой функции мы помещаем другую функцию, которая уже будет производить необходимую нам обработку различных действий (в данном случае проверку условий). Декоратор приравниваем к отдельному параметру (для удобства указали что это типа func тип для ясности что там выполняется функция. Внутри обертки мы указываем что будем принимать и проверять параметр URL из первоначальной функции, создаем условие выполнения через оператора if else, после чего return возвращает полученный результат, в функцию декоратора, если все ок то funk декоратора принимает значение параметра URL и исполняет его в рамках первоначальной функции(то есть ей дали добро на исполнение). Если не выполняются, то func принимает значение из ветки иначе(else) и пользователь видит ответ: "мол что nо не так" или происходит иное действие, в зависимости от того что мы пропишем в блоке else (при условии использования условного оператора). Если выражаться проще декоратор позволяет как бы вставить уникальную функцию, в блок более универсальной функции и обрабатывать полученные в ней данные, дабы не писать каждый раз эту обработку для каждой отдельной функции подобного типа. Принцип схож на класс, только для функций а не переменных, в целом как то так))

  • @mr.doctor9429

    @mr.doctor9429

    2 жыл бұрын

    @@silvertruenoobs340 Как параметр func сам стал функцией?? С каких пор параметр может принимать другой параметр, и что он с ним делает. Чет я запутался. Может я что не знаю про параметы)))

  • @silvertruenoobs340

    @silvertruenoobs340

    2 жыл бұрын

    @@mr.doctor9429 Это скорее я несколько криво расписал)) я же говорю что могу ошибаться так как сам только разбираюсь в хитросплетениях этих функций. Параметр функцией не становится, на то он и параметр что бы просто принимать значение)) при этом благодаря функциям мы можем их так сказать обрабатывать. Если перевернуть код и пойти с конца, для большей ясности, то получается что мы создали функцию для открытия ссылки и указали что параметр в который будет передаваться значение будет иметь имя "url", если перефразировать иначе мы как бы говорим что url = адресу ссылки, что то вроде закадровой переменной, для работы с параметрами Иными словами мы говорим функция открытия ссылки будет принимать параметр url, а значение параметра url это адрес нашей ссылки (надеюсь не запутал все еще больше). Далее мы к нашей функции применяем метод из импортированного модуля, который позволяет открывать ссылки. Теперь переходим к декоратору. Изначально мы создаем функцию любым параметром, просто говорим, что он есть, что бы при обращении к функции, был параметр который может принять какой либо значение. Далее создаем еще одну функцию, которая уже будет проверять условия для нашего параметра url, который имеет значения адреса ссылки. В данном случае мы проверяем адрес на наличие точки. При условии что точка есть, ранее указанный нами параметр (при создании первой функции декоратора) обращается к параметру url, иными словами мы говорим параметру func, что он вызывает параметр урл, (ну или пропускает его дальше), если же условие не выполняется то используется вывод текста (может быть нечто иное) и возвращаем полученное значение параметра ретерном. То есть добавил декоратор к функции открытия ссылки мы фактически словно запихнули эту функцию в блок условного оператора и сказали что открытие ссылки будет происходить только при условии что параметр функции декоратора обратиться к параметру функции открытия ссылки, в ином случае функция выполнена не будет и мы перейдем в блок "иначе". Тип как на кпп, где декоратор это проверяющий документы, а выполнение функции это открытие шлагбаума. Сама функция приехал, шлагбаум открылся, проехал. Докинем сюда декоратора, и возле шлагбаума появился проверяющий, который либо проверит документы и скажет проезжай, то есть одобрит выполнение функции, обратившись к тому кто управляет шлагбаумом, либо скажет сорян, у вас страховка просрочена, пропустить не могу(как то так)

  • @user-tg2lr3zi2f
    @user-tg2lr3zi2f Жыл бұрын

    этот пример легко делается и без декоратора. может он где-то нужен, но тут можно и без него

  • @detector7567
    @detector75672 жыл бұрын

    Не понимаю почему, но сначала у меня открылся сайт, а в следующих запусках происходит ошибка.

  • @user-kr4fr6lj3b
    @user-kr4fr6lj3b8 ай бұрын

    Не совсем понимаю, как обертка берет параметр у функции. Если у них допусти будет разное количество параметров? Если вдруг кто в курсе буду рад ответу) За курс огромное спасибо, вроде как переварил по эксперементировал и законспектировал, буду двигаться дальше.

  • @quentindrenton
    @quentindrenton Жыл бұрын

    Я буду тут каждый день. День 11.1

  • @YuriBakharev
    @YuriBakharev Жыл бұрын

    В данном случае примера, какая-то не надёжная идея реализации. Забытая точка... В моем случае, я точку не забываю, а очепятаться вполне могу. Может лучше пропинговать список сайтов, если их много. Составить список приоритетов. И ломиться на самый ответчивый адрес....

  • @user-ox5ki3ns8o
    @user-ox5ki3ns8o Жыл бұрын

    ребят - кто прошел курс? расскажите чему вы научились?)

  • @wayzz9234

    @wayzz9234

    Жыл бұрын

    Ну что, как успехи?

  • @user-ox5ki3ns8o

    @user-ox5ki3ns8o

    Жыл бұрын

    @@wayzz9234 никак

  • @blimeblackrussia-crmp9347

    @blimeblackrussia-crmp9347

    Жыл бұрын

    Я прошёл уже научился делать небольшие но прикольные программы и получил основы языка python . Очень полезный курс!!!

  • @ronfy_9786

    @ronfy_9786

    Жыл бұрын

    ​@@blimeblackrussia-crmp9347спустя 2 месяца твои знания увеличились? Если ты дальше учил то можешь сказать по каким курсам пожалуйста

  • @SemyonMazepin

    @SemyonMazepin

    Жыл бұрын

    ​@@ronfy_9786 в комментариях к урокам предыдущим видел писали про курс Пайтона на канале selfedu, там 70+ уроков, сам не смотрел ещё

  • @enkeibeautiful7342
    @enkeibeautiful734211 ай бұрын

    Как поменять браузер, чтобы webbrowser закидывал меня не на встроенный браузер, а на какой-нибудь другой

  • @ney107-iz6xl
    @ney107-iz6xl9 ай бұрын

    Что значит return в данном случае Это просто якобы чтобы вся эта конструкция с def проходила правильно или зачем объясните пожалуйста?

  • @dmitry.masalskiy
    @dmitry.masalskiy Жыл бұрын

    Задекорировано!

  • @orthodox-chanel
    @orthodox-chanel Жыл бұрын

    можете по подробнее разжевать про кодировки? а то при начале работы с декораторами на строке func(url) вышла ошибка по поводу кодировок. По ссылке которая прилагалась к ошибке было написанно что нужно прописать данный код чтобы решить проблемму: #!/usr/bin/python # - *- coding: utf-8 - *-

  • @SemyonMazepin
    @SemyonMazepin Жыл бұрын

    Мне непонятно почему функция с открытием ссылки func(url) запускается по функции open_url(url) Нет же нигде указания что переменная url значит, ссылка как open_url("ссылка") указана

  • @SemyonMazepin

    @SemyonMazepin

    Жыл бұрын

    Кажется понял, срабатывает потому что url в webbrowser.open(url) записано

  • @OlegBrit
    @OlegBrit Жыл бұрын

    def validator(func): def wrapper(url): if "." in url: а если в этом условия я хочу указать что две точки надо в url? как мне это сделать?

  • @avboh662

    @avboh662

    Жыл бұрын

    Для проверки наличия двух точек в URL можно использовать метод count() для строки url. def validator(func): def wrapper(url): if "." in url and url.count(".") == 2: return func(url) else: raise ValueError("Invalid URL") return wrapper Здесь использовал дополнительное условие url.count(".") == 2, которое проверяет, что в строке url ровно два символа точки. Если это условие не выполняется, то функция wrapper выбрасывает исключение ValueError с сообщением "Invalid URL". Ответил спутся 3 месяца, пусть это будет ответом для других, так как уверен что тебе уже это не нужно.

  • @user-kk7fb1gr6n
    @user-kk7fb1gr6n8 ай бұрын

    То чувство когда за день посмотрел все уроки 🙂

  • @Doew

    @Doew

    8 ай бұрын

    и как?

  • @kingston6161

    @kingston6161

    8 ай бұрын

    Важна не скорость, а понимание материала

  • @markiyanlekh7505
    @markiyanlekh7505 Жыл бұрын

    АОП

  • @user-cw1dv2fv1q
    @user-cw1dv2fv1q2 жыл бұрын

    Что делает func(url) ?

  • @fianon3139

    @fianon3139

    Жыл бұрын

    Я надеюсь ты уже разобрался,но объясню,то как понял я. func - вызов функции, которая будет внутри декоратора. url - входные данные То, что перед func() будет выполняться до функции,а что после func будет после

  • @ostpsyho1979
    @ostpsyho19797 ай бұрын

    Last one.

  • @slavaseredenko4846
    @slavaseredenko48462 жыл бұрын

    Браузер не открывается, к сожалдению. Вин 10. Пытается купить какое-то приложение

  • @user-ox5ki3ns8o

    @user-ox5ki3ns8o

    Жыл бұрын

    На маке ничего не происходит вообще

  • @user-br2sy6kc8k
    @user-br2sy6kc8k Жыл бұрын

    Здравствуйте мне 17 лет и я создал телеграмм канал, где показываю с какими трудностями я сталкиваюсь при изучении языков программирования с нуля. Также объясняю, как решать эти проблемы. К каналу есть чат, где я отвечаю на интересующие вас вопросы, если заинтересовало ставь +

  • @allay138
    @allay1387 ай бұрын

    Чтобы проще было с ооп изучите сначала Java коллеги

  • @Myflon-Myflo_ne.r
    @Myflon-Myflo_ne.r3 ай бұрын

    Последний рубеж...

  • @chrisrogers3795
    @chrisrogers3795 Жыл бұрын

    Вообще ничего непонятно, что откуда берётся, почему в функцию пишем не заданные перменные. Я вообще в шоке, что код этот запускается, это видимо магия какая-то программирования. Тут переменная ля функций задаётся лишь в самом конце, крч бред, я пока не понимаю.

  • @Nezi_11
    @Nezi_117 ай бұрын

    Ура...Ад пройден!

  • @rezhuchicony

    @rezhuchicony

    4 ай бұрын

    если для вас программирования это ад, можете уходить с чистой душой

  • @cuphead4877
    @cuphead4877 Жыл бұрын

    Скажите, кто-нибудь куда нибудь устроился после этих курсов?

  • @SeraphimLUX

    @SeraphimLUX

    9 ай бұрын

    Это вводный курс, после него ты никуда не устроишься...

  • @rtty6yfddtyuvfft

    @rtty6yfddtyuvfft

    7 ай бұрын

    чтобы куда нибудь устроится надо диплом) самоучки фрилансят

  • @mcgregor9832

    @mcgregor9832

    5 күн бұрын

    ​@@rtty6yfddtyuvfftдиплом не обязателен для программиста

  • @xurshidortiqov1171
    @xurshidortiqov11716 ай бұрын

    Почему у меня не открывается сайт? я всё правильно переписал

  • @user-jt2cr8tq9l
    @user-jt2cr8tq9l Жыл бұрын

    последние 2 урока в помойку, тот ошибку выдает, тут сайт не открывает хз, так то полезно но есть много но

  • @imomarik5802

    @imomarik5802

    Жыл бұрын

    У меня тоже не открывает сайт

  • @user-vw3tg4qn3b

    @user-vw3tg4qn3b

    3 ай бұрын

    блин , жиза( К сожалению , я как-то неправильно скачал или не то сделал(

  • @Derek_3
    @Derek_37 ай бұрын

    Тут вообще не обьясняешь, зачем говорит то что ты даже не объясняешь

  • @____gd____3252
    @____gd____32527 ай бұрын

    Валидатор. Заучит как депоперы😂

  • @anonimanonim7358
    @anonimanonim7358 Жыл бұрын

    Какая то муть.

Келесі