Первый декоратор, разбираемся с написанием
HTML-код
- Опубликовано: 14 мар 2021
- Попробуем написать декоратор и разобраться что это такое, для чего он нужен.
Вообще декоратор - это паттерн программирования и используется во многих языках, важное отличие что в Python для них отведено особое место и используется синтаксический сахар @decorator
Для написания декоратора нужно понимать:
1) функция полноправный объект, который можно передавать, возвращать, хранить в коллекции и делать все то, что с другими объектами
2) внутренняя функция может захватывать значения переменных из внешней
Суть декоратора в том, что мы можем менять поведение декорируемого объекта, при этом не меняя его собственную реализацию, его код.
Ссылки:
docs.python.org/3/reference/c...
docs.python.org/3/glossary.ht...
Присоединяйся к помощи каналу, будет интересно)
✔️Бусти boosty.to/python_russian/donate
✔️Юмани 410011506612886
Будь первым везде и всегда, включай уведомления о новых выпусках 🔔
#Python #PythonRussian #PyCharm
Уважаемый автор, у вас безусловный преподавательский талант. Это видно по многим видео. В каждом вы не спеша очень доступно разъясняете новичкам тему. И, что важно, морально поддерживаете их. Спасибо за ваш труд и желание поделиться знаниями!
По теме декораторов. Понимание для меня приходило последовательно. Я познакомился с ними 3 месяца назад. Нельзя сказать, что объяснение (на другом канале) было плохое. Скорее, просто понадобилось определенное время, чтобы переварить это. Наконец-то пищеварение справилось) Спасибо автору канала.
полностью согласен. у меня имеется доступ к платным курсам от коробки, там эти информацию упаковали в 9 минут. и в основном автор просто диктует что пишет. а не пытается объяснять свои действия. и нет, они не так уж плохи, но автор Python Russia пишет видео от души так сказать)
Спасибо огромное за уроки, безумно полезно и доступно!
благодарю за теплые слова. К сожалению, сейчас совсем нет времени на новые видео, но после нового года постараюсь еще пару полезностей заснять.
Вот просто большое спасибо, никакой воды, все понятным языком, как для кирпича все очень даже понял, автору большое спасибо
Все доступно и без лишней воды....хотя, в фоне как будто вода льется перед микрофоном :))
не жалко писать коменты автору, который делает очень годный контент!
Спасибо Вам за видео! Очень понятно и интересно!
Это не видео, а бомба!
не уверен, что ты искренен=) по-моему немного путано получилось и не понятно
@@PythonRussian нуу не знаю, я просто декораторы уже проходил, поэтому мне все понятно было. Это надо спросить у тех кто впервые о таком слышит
С 100500 попытки стало понятно. Спасибо!
Спасибо за урок! После просмотра, закрепил написанием собственного декоратора и опробовал на разных функциях. Осталось переварить, зачем он нужен(практическое применение), но это дело времени и много практики.
большое спасибо за материал, но как же тихо, это жесть
Весь ютуб лучше смотреть с включенной тонокомпенсацией в Realtek
Спасибо!
Спасибо! Действительно очень круто объясняете, это талант!
ТЫ просто ТОП! Спасибо за то что так круто объясняешь!!!!!
Ждем вторую часть!)
пока времени не хватает, но сделаю
Большое спасибо! Достаточно сложно понять с первого раза что произошло)) понял, что декоратор это некий апгрейд существующих или даже импортированных функций под наши задачи.
лучшее обьяснение, обожаю твой канал
Спасибо. Подробно и понятно.
отлично объяснил ))) эффект прозрения получил , спасибо)).подпись: горемыка )))
Прекрасно!!!
сегодня пойду под твой канал пару общих тетрадок куплю).. ьуду раскрывать темы до конца, со всеми ссылками)
вот это светлая мысль! не потому что канал, а то что будешь конспектировать и читать по ссылкам и в книжках - это просто круто помогает в развитии. У самого старые конспекты лежат по питону =) Отработали свое и принесли свою пользу.
Я это с самого начала делаю👍🏻
Контент - пушка_ракета!
Круто! Кое что дошло, но практика все решает
да, без практики в нашем деле никуда
Крутая идея - создать декоратор, который заворачивает функцию в thread и запускает его.
идея хорошая, главное понимать, что там в функции будет происходить и не забывать про GIL
Спасибо ! А почему в выводе значение основной функции (5) идёт после "обертки " декоратора "до" и "после" ?
Просьба в следующих видео сделать шрифт по крупнее так как Вас смотрят люди и с плохим зрением!
да, я стараюсь, просто если сильно увеличивать то на экране мало входит и приходится скроллить туда сюда.
@Python_Russian, как вы прикрепляете функцию print в конце строки и она автоматически встает в начало?
пичарм так умеет, у меня есть видео по комбинациям клавиш и фишкам.
да, на первых порах сложно =) но зато информативно
Здравствуйте, почему мы не можем вызывать враппер с тремя аргументами и третьм передавать func(как объект), и всё будет одно и тоже? Или это так делать не надо?
Спасибо за урок. Вы хорошо объяснили что такое декоратор, но не объяснили зачем он нужен. из урока ясно, что функцию sum() можно использовать без всех этих танцев с бубном. Так что урок либо следует переработать, либо сделать предварительное введение в декораторы где рассказать, зачем они нужны.
Спасибо. Не сразу, но разобрался.
Получается мы первой командой function = logger(summ):
1. Передаем адрес объекта-функции summ в функцию logger
2. Создаем объект-функцию function, которая ссылается на внутреннюю функцию wrapper
И теперь по факту командой function(2, 3) мы вызываем функцию wrapper(2, 3), в которой уже инициализирован объект-функция summ.
Но возник вопрос. А в чем преимущество декоратора от вот такого с виду более простого решения?
##############################
def logger_new(func, a, b):
print(f'{func.__name__} started_2')
result = func(a,b)
print(f'{func.__name__} finished_2')
return result
print(logger_new(summ, 2, 3))
##############################
Первое преимущество - встроенное средство языка, которое грех не использовать, второе и самое главное - придется импортировать и писать твой логгер везде, представь что сумм у нас в 15 модулях используется по коду. А декоратором 1 раз декорировали саму функцию и она везде работает одинаково.
@@PythonRussian да, про дублирование я не додумался. Спасибо!
возможно глупый вопрос. но вот стало интересно. Попалась такая задача, где имеется функция, уже задекорированная декоратором №1 и она с параметром. Мне нужно было обернуть декоратор №1 своим декоратором № 2. Я конечно сделал по самому очевидному пути. Перед местом, где функция декорируется декоратором №1 обернул декоратор №1 декоратором №2. Но мне стало интересно, а возможно ли написать такой декоратор №2, который стеком декорирует функцию, которая уже задекорирована декоратором №2 так, что бы можно было перехватить параметры декоратора №1 декоратором №2, что бы например проверить параметр который был передан декоратору№1 и в случае его валидности, просто вернуть обратно декоратору№ 1 или как то в дальнейшем выполнить доп. логику, в случае если данные в параметре были не валидные. Проще говоря применить синтаксический сахар над функцией, на которой весит другой сахар с параметрами и вот эти параметры хочу провалидировать.
Жалко что в тг нет чата или хотя бы комментариев к постам)
потому что ютуб комменты не предназначены для цитирования кода и больших обсуждений. Для этого есть форумы, один из них указан в ссылках канала
А почему оператор return невыходит использовать в If если она не внутри функции?
ретурн же это возврат, а если не из функции то откуда возврат?
@@PythonRussian согласен. Но в книге грокаем алгоритмы ретурн в блоке if и это условие не в блоке функции . И пишут запустите этот код. Так же есть тоже самое но уже в блоке функции.
@@PythonRussian книга грокаем алгоритмы в параграфе алгоритм дейкстры
@@PythonRussian большое спасибо что ответили .
@@PythonRussian согласен . Значит в книге ошибка и эта книга не та с которой можно чему то учиться ?
wrapper должен получать как *args так и **kwargs, иначе аргументы переданные по ключу не передадутся в оборочиваемую функцию, а в классе он должен еще и принимать self
допустим, а еще параметризованый декоратор можно писать. А тема конкретно этого ролика какая?
@@PythonRussian, Ладно, но про kwards можнг было и тут упомянуть, боюсь многие посыпятся на этом
Без 100 грамм не разберешься.
ВОпрос один мучает, подстать твоему каналу. МНого где слышу, что нагруженные части питоне, люди пишут на С++, и потом их интегрируют в код. Как это выглядит вообще? Это модуль скомпилированный? в питоне потом подключается через импорт или как? Что там за процедура вообще.. может где туториал есть поизучать? я между конспектами и кодингом отдыхаю изучая вот такие впоросы, что бы поинмать к чему меня может притянуть, и какие навыки пригодятся, а какие нет..
понятия не имею, никогда не занимался, но в некоторых книгах есть раздел об этом, где показывают способ. По мне так это крайне редкая вещь в реальной работе.
Могу быть не прав, но такое, насколько я понимаю, можно сделать с Cython - cython.readthedocs.io/en/latest/src/userguide/wrapping_CPlusPlus.html
Честно, не очень понимаю идею декораторов через сахар. Без сахара понятно, у тебя есть область видимости, там тебе нужна немного другая сумма, там ты её и задекорировал, при этом вне этой области сумма старая. А вот с сахаром... так теперь сумма везде изменена, почему тогда сразу саму сумму не поменять?
для 1 функции и 1 правки возможно, а что если тебе нужно поменять 3 разные функции одинаково? ты полезешь в код всем 3 или сделаешь 1 декоратор?
@@PythonRussian спасибо, теперь стало намного яснее!
И ещё большее спасибо за оперативный комментарий!
Можешь громче делать ролики? Бесит дико
наверное как то могу, посмотрим
Очень мелко. Не видно