Уроки 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
если Вам кто-то еще будет затирать про переполненный рынок программистов обязательно покажите им сколько набирает просмотров первое видео у курсов и сколько последнее) Гоша, огромное тебе спасибо за то, что ты делаешь! Отличный визуал, отличный звук, в основном все понятно, это просто.. шедевр?
@mr.doctor9429
2 жыл бұрын
И это только вводный курс. До конца доходят вообще еденицы))
@user-eo9kz8ru9d
Жыл бұрын
@@hentai-tok2942 та же история,брат
@MikeMentzer09
Жыл бұрын
Я ДУМАЛ ЭТО Я ОДИН ЗАМЕТИЛ,ТЫ ДУМАЕШЬ ТОЧНО ТАКЖЕ КАК И Я
@Haykdzya
Жыл бұрын
@@MikeMentzer09 ya toje tak dumal
@jcmofficialchannel
Жыл бұрын
я тоже заметил эту закономерность)) забавно)))
Гоша, вы большой молодец, если не сказать гений. Благодарю вас за ваш труд. Даже не верится, что такое количество полезного материала сделал один человек.
Думал после этого урока пойду устраиваться на работу , но сами понимаете , что делать дальше ) хочу сказать , что нынешнее образование в именно 3 курс обосраной шараги мне не дали даже те знания , которое я получил за счет этого канала. Счастливо , коллеги )
@nl0823
7 ай бұрын
Чем же вы тогда занимались все эти три курса? Как успехи с утраиванием на работу?
@MynameisZOOM
8 күн бұрын
Ну если ты не изучал ничего кроме этих видео уроков то знаний будет слишком мало. Там нужно знать фреймворки, дафига библиотек и тд
Я молодец, я справилась! Осталась только заключительная часть и отзыв. Спасибо за урок!
За неделю посмотрел все видео. Всё понятно, кратко и без лишней воды. Большое спасибо за курс!
@I_shinobi_I
3 ай бұрын
А я за 5 дней
@I_shinobi_I
3 ай бұрын
Только сейчас заметил что комментарию уже два года)
Спасибо за доходчивое объяснение!)
Спасибо большое автору за его труд!!!!!!!
Выжившие, сколько нас тут?
@Beliy_voron
2 жыл бұрын
Еще смотрю)
@qwertyssl
2 жыл бұрын
уже закончик как 2 дня), сейчас начну html и css для django
@gddotop2231
2 жыл бұрын
Я живой
@gddotop2231
2 жыл бұрын
Буду ещё смотреть документацию для полного обучения и Selfedu
@Virusnik
Жыл бұрын
Даа
Отличное видео, сделайте курс по PySpark, пожалуйста
Супер класс! Очень быстро соображаешь, мозг как движок гоночного болида, если бы была выхлопная труба от туда бы точно вырывались языки пламени
Не плохо бы перед темой с декораторами, объяснить, что такое замыкание.
красавчик, все понятно объяснил
Показан пример, в котором у декорируемой функции ровно 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
Жыл бұрын
Ничего не понял, но теперь код не запускается. 😎👍
@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
Жыл бұрын
@@olegkomlev да я нашел урок получше по декораторам, там как раз ваш способ был показан. Так что спасибо 😎👍
@soulevance9667
10 ай бұрын
ты гений
ЮХУУУУУУ СПУСТЯ 2 НЕДЕЛИ Я ПРОШЛА ЭТО!!! Всем ,кто тоже дошел до конца удачи в начинаниях программирования и в 2024 году))) /p.s. благодаря этому видеоуроку я сама себя зарикролила🤫🤫🤫
@artwill7283
12 күн бұрын
Привет тебе тоже удачи
@benon43
12 күн бұрын
print ("u have been rickrolled :)")
Инкапсуляция *была создана для защиты* - но у создателя совсем другие планы пути на ее счет, по этому пусть просто существует как красивая аббревиатура. Спасибо за внимание)
Привет очень классно спасибо тебе, мне 14 лет и я хочю пойти учиться на программиста, и смотрю твои уроки, продалжай в том же духе!!!
@eldar_2008
Жыл бұрын
Лучше русский язык выучи, столько ошибок в одном предложении...... даун нормально пиши
@aogirimaloy
Жыл бұрын
как успехи в программировании?
@apav7
Жыл бұрын
забил походу, как многие
@AlgoVersePro
6 ай бұрын
@@apav7 хзхз, может уже на пляже с девками кодит
Спасибо автору за бесплатный курс наконец-то это конец
Усвоил все за неделю, спасибо большое за хорошие уроки, которые легко понимаются
@gddotop2231
2 жыл бұрын
Я за 3 дня
@apav7
Жыл бұрын
@@gddotop2231 куда устроились какая зп? небось уже сеньёры?
5:02 Тут сразу можно вызвать функцию try: и сразу проверить
Единственный урок из всех где я ни хрена не понтяно что откуда и почему в этиих функциях.
я бы сюда добавил отправку api запроса с помощью Curl, для проверки существования сайта подходит лучше всего.
Очень хороший курс, но у меня ссылкк открывается в интернет експлорере, хотя браузер по умолчанию хром
Ваш сайт не открывает браузер выдаёт ошибку. Как мохно попасть на ваш сайт?
почему у меня не открывает оупен/юрл ничего? просто пишет код 0, но браузер не открывает
Я ПРОШЕЛ БАЗОВЫЙ КУРС ПИТОНА 🚀
Я не до конца понял как это работает,но это работает,было бы хорошо ели бы ты объяснил саму логику и принцип действия декоратора,ну а так в целом-есть пример есть вывод и самому пораскинуть мозгами можно)
@silvertruenoobs340
2 жыл бұрын
из того как это понял я)) пока только примерно, возможно где то ошибусь, если что поправьте, мы создаем функцию которая будет основной, и является своего рода флагом для быстрого обращения к ней далее в теле проекта. Внутри этой функции мы помещаем другую функцию, которая уже будет производить необходимую нам обработку различных действий (в данном случае проверку условий). Декоратор приравниваем к отдельному параметру (для удобства указали что это типа func тип для ясности что там выполняется функция. Внутри обертки мы указываем что будем принимать и проверять параметр URL из первоначальной функции, создаем условие выполнения через оператора if else, после чего return возвращает полученный результат, в функцию декоратора, если все ок то funk декоратора принимает значение параметра URL и исполняет его в рамках первоначальной функции(то есть ей дали добро на исполнение). Если не выполняются, то func принимает значение из ветки иначе(else) и пользователь видит ответ: "мол что nо не так" или происходит иное действие, в зависимости от того что мы пропишем в блоке else (при условии использования условного оператора). Если выражаться проще декоратор позволяет как бы вставить уникальную функцию, в блок более универсальной функции и обрабатывать полученные в ней данные, дабы не писать каждый раз эту обработку для каждой отдельной функции подобного типа. Принцип схож на класс, только для функций а не переменных, в целом как то так))
@mr.doctor9429
2 жыл бұрын
@@silvertruenoobs340 Как параметр func сам стал функцией?? С каких пор параметр может принимать другой параметр, и что он с ним делает. Чет я запутался. Может я что не знаю про параметы)))
@silvertruenoobs340
2 жыл бұрын
@@mr.doctor9429 Это скорее я несколько криво расписал)) я же говорю что могу ошибаться так как сам только разбираюсь в хитросплетениях этих функций. Параметр функцией не становится, на то он и параметр что бы просто принимать значение)) при этом благодаря функциям мы можем их так сказать обрабатывать. Если перевернуть код и пойти с конца, для большей ясности, то получается что мы создали функцию для открытия ссылки и указали что параметр в который будет передаваться значение будет иметь имя "url", если перефразировать иначе мы как бы говорим что url = адресу ссылки, что то вроде закадровой переменной, для работы с параметрами Иными словами мы говорим функция открытия ссылки будет принимать параметр url, а значение параметра url это адрес нашей ссылки (надеюсь не запутал все еще больше). Далее мы к нашей функции применяем метод из импортированного модуля, который позволяет открывать ссылки. Теперь переходим к декоратору. Изначально мы создаем функцию любым параметром, просто говорим, что он есть, что бы при обращении к функции, был параметр который может принять какой либо значение. Далее создаем еще одну функцию, которая уже будет проверять условия для нашего параметра url, который имеет значения адреса ссылки. В данном случае мы проверяем адрес на наличие точки. При условии что точка есть, ранее указанный нами параметр (при создании первой функции декоратора) обращается к параметру url, иными словами мы говорим параметру func, что он вызывает параметр урл, (ну или пропускает его дальше), если же условие не выполняется то используется вывод текста (может быть нечто иное) и возвращаем полученное значение параметра ретерном. То есть добавил декоратор к функции открытия ссылки мы фактически словно запихнули эту функцию в блок условного оператора и сказали что открытие ссылки будет происходить только при условии что параметр функции декоратора обратиться к параметру функции открытия ссылки, в ином случае функция выполнена не будет и мы перейдем в блок "иначе". Тип как на кпп, где декоратор это проверяющий документы, а выполнение функции это открытие шлагбаума. Сама функция приехал, шлагбаум открылся, проехал. Докинем сюда декоратора, и возле шлагбаума появился проверяющий, который либо проверит документы и скажет проезжай, то есть одобрит выполнение функции, обратившись к тому кто управляет шлагбаумом, либо скажет сорян, у вас страховка просрочена, пропустить не могу(как то так)
этот пример легко делается и без декоратора. может он где-то нужен, но тут можно и без него
Не понимаю почему, но сначала у меня открылся сайт, а в следующих запусках происходит ошибка.
Не совсем понимаю, как обертка берет параметр у функции. Если у них допусти будет разное количество параметров? Если вдруг кто в курсе буду рад ответу) За курс огромное спасибо, вроде как переварил по эксперементировал и законспектировал, буду двигаться дальше.
Я буду тут каждый день. День 11.1
В данном случае примера, какая-то не надёжная идея реализации. Забытая точка... В моем случае, я точку не забываю, а очепятаться вполне могу. Может лучше пропинговать список сайтов, если их много. Составить список приоритетов. И ломиться на самый ответчивый адрес....
ребят - кто прошел курс? расскажите чему вы научились?)
@wayzz9234
Жыл бұрын
Ну что, как успехи?
@user-ox5ki3ns8o
Жыл бұрын
@@wayzz9234 никак
@blimeblackrussia-crmp9347
Жыл бұрын
Я прошёл уже научился делать небольшие но прикольные программы и получил основы языка python . Очень полезный курс!!!
@ronfy_9786
Жыл бұрын
@@blimeblackrussia-crmp9347спустя 2 месяца твои знания увеличились? Если ты дальше учил то можешь сказать по каким курсам пожалуйста
@SemyonMazepin
Жыл бұрын
@@ronfy_9786 в комментариях к урокам предыдущим видел писали про курс Пайтона на канале selfedu, там 70+ уроков, сам не смотрел ещё
Как поменять браузер, чтобы webbrowser закидывал меня не на встроенный браузер, а на какой-нибудь другой
Что значит return в данном случае Это просто якобы чтобы вся эта конструкция с def проходила правильно или зачем объясните пожалуйста?
Задекорировано!
можете по подробнее разжевать про кодировки? а то при начале работы с декораторами на строке func(url) вышла ошибка по поводу кодировок. По ссылке которая прилагалась к ошибке было написанно что нужно прописать данный код чтобы решить проблемму: #!/usr/bin/python # - *- coding: utf-8 - *-
Мне непонятно почему функция с открытием ссылки func(url) запускается по функции open_url(url) Нет же нигде указания что переменная url значит, ссылка как open_url("ссылка") указана
@SemyonMazepin
Жыл бұрын
Кажется понял, срабатывает потому что url в webbrowser.open(url) записано
def validator(func): def wrapper(url): if "." in url: а если в этом условия я хочу указать что две точки надо в url? как мне это сделать?
@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 месяца, пусть это будет ответом для других, так как уверен что тебе уже это не нужно.
То чувство когда за день посмотрел все уроки 🙂
@Doew
8 ай бұрын
и как?
@kingston6161
8 ай бұрын
Важна не скорость, а понимание материала
АОП
Что делает func(url) ?
@fianon3139
Жыл бұрын
Я надеюсь ты уже разобрался,но объясню,то как понял я. func - вызов функции, которая будет внутри декоратора. url - входные данные То, что перед func() будет выполняться до функции,а что после func будет после
Last one.
Браузер не открывается, к сожалдению. Вин 10. Пытается купить какое-то приложение
@user-ox5ki3ns8o
Жыл бұрын
На маке ничего не происходит вообще
Здравствуйте мне 17 лет и я создал телеграмм канал, где показываю с какими трудностями я сталкиваюсь при изучении языков программирования с нуля. Также объясняю, как решать эти проблемы. К каналу есть чат, где я отвечаю на интересующие вас вопросы, если заинтересовало ставь +
Чтобы проще было с ооп изучите сначала Java коллеги
Последний рубеж...
Вообще ничего непонятно, что откуда берётся, почему в функцию пишем не заданные перменные. Я вообще в шоке, что код этот запускается, это видимо магия какая-то программирования. Тут переменная ля функций задаётся лишь в самом конце, крч бред, я пока не понимаю.
Ура...Ад пройден!
@rezhuchicony
4 ай бұрын
если для вас программирования это ад, можете уходить с чистой душой
Скажите, кто-нибудь куда нибудь устроился после этих курсов?
@SeraphimLUX
9 ай бұрын
Это вводный курс, после него ты никуда не устроишься...
@rtty6yfddtyuvfft
7 ай бұрын
чтобы куда нибудь устроится надо диплом) самоучки фрилансят
@mcgregor9832
5 күн бұрын
@@rtty6yfddtyuvfftдиплом не обязателен для программиста
Почему у меня не открывается сайт? я всё правильно переписал
последние 2 урока в помойку, тот ошибку выдает, тут сайт не открывает хз, так то полезно но есть много но
@imomarik5802
Жыл бұрын
У меня тоже не открывает сайт
@user-vw3tg4qn3b
3 ай бұрын
блин , жиза( К сожалению , я как-то неправильно скачал или не то сделал(
Тут вообще не обьясняешь, зачем говорит то что ты даже не объясняешь
Валидатор. Заучит как депоперы😂
Какая то муть.