Первый декоратор, разбираемся с написанием
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 пишет видео от души так сказать)
Спасибо огромное за уроки, безумно полезно и доступно!
благодарю за теплые слова. К сожалению, сейчас совсем нет времени на новые видео, но после нового года постараюсь еще пару полезностей заснять.
С 100500 попытки стало понятно. Спасибо!
Вот просто большое спасибо, никакой воды, все понятным языком, как для кирпича все очень даже понял, автору большое спасибо
Все доступно и без лишней воды....хотя, в фоне как будто вода льется перед микрофоном :))
не жалко писать коменты автору, который делает очень годный контент!
Спасибо за урок! После просмотра, закрепил написанием собственного декоратора и опробовал на разных функциях. Осталось переварить, зачем он нужен(практическое применение), но это дело времени и много практики.
Это не видео, а бомба!
не уверен, что ты искренен=) по-моему немного путано получилось и не понятно
@@PythonRussian нуу не знаю, я просто декораторы уже проходил, поэтому мне все понятно было. Это надо спросить у тех кто впервые о таком слышит
Спасибо Вам за видео! Очень понятно и интересно!
Спасибо! Действительно очень круто объясняете, это талант!
Ждем вторую часть!)
пока времени не хватает, но сделаю
ТЫ просто ТОП! Спасибо за то что так круто объясняешь!!!!!
Спасибо. Подробно и понятно.
лучшее обьяснение, обожаю твой канал
Прекрасно!!!
Большое спасибо! Достаточно сложно понять с первого раза что произошло)) понял, что декоратор это некий апгрейд существующих или даже импортированных функций под наши задачи.
Просьба в следующих видео сделать шрифт по крупнее так как Вас смотрят люди и с плохим зрением!
да, я стараюсь, просто если сильно увеличивать то на экране мало входит и приходится скроллить туда сюда.
большое спасибо за материал, но как же тихо, это жесть
Весь ютуб лучше смотреть с включенной тонокомпенсацией в Realtek
Крутая идея - создать декоратор, который заворачивает функцию в thread и запускает его.
идея хорошая, главное понимать, что там в функции будет происходить и не забывать про GIL
Спасибо!
сегодня пойду под твой канал пару общих тетрадок куплю).. ьуду раскрывать темы до конца, со всеми ссылками)
вот это светлая мысль! не потому что канал, а то что будешь конспектировать и читать по ссылкам и в книжках - это просто круто помогает в развитии. У самого старые конспекты лежат по питону =) Отработали свое и принесли свою пользу.
Я это с самого начала делаю👍🏻
Контент - пушка_ракета!
отлично объяснил ))) эффект прозрения получил , спасибо)).подпись: горемыка )))
Круто! Кое что дошло, но практика все решает
да, без практики в нашем деле никуда
Алексей Леонов!
да, на первых порах сложно =) но зато информативно
Спасибо ! А почему в выводе значение основной функции (5) идёт после "обертки " декоратора "до" и "после" ?
@Python_Russian, как вы прикрепляете функцию print в конце строки и она автоматически встает в начало?
пичарм так умеет, у меня есть видео по комбинациям клавиш и фишкам.
Спасибо за урок. Вы хорошо объяснили что такое декоратор, но не объяснили зачем он нужен. из урока ясно, что функцию sum() можно использовать без всех этих танцев с бубном. Так что урок либо следует переработать, либо сделать предварительное введение в декораторы где рассказать, зачем они нужны.
Здравствуйте, почему мы не можем вызывать враппер с тремя аргументами и третьм передавать func(как объект), и всё будет одно и тоже? Или это так делать не надо?
Спасибо. Не сразу, но разобрался.
Получается мы первой командой 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 да, про дублирование я не додумался. Спасибо!
wrapper должен получать как *args так и **kwargs, иначе аргументы переданные по ключу не передадутся в оборочиваемую функцию, а в классе он должен еще и принимать self
допустим, а еще параметризованый декоратор можно писать. А тема конкретно этого ролика какая?
@@PythonRussian, Ладно, но про kwards можнг было и тут упомянуть, боюсь многие посыпятся на этом
возможно глупый вопрос. но вот стало интересно. Попалась такая задача, где имеется функция, уже задекорированная декоратором №1 и она с параметром. Мне нужно было обернуть декоратор №1 своим декоратором № 2. Я конечно сделал по самому очевидному пути. Перед местом, где функция декорируется декоратором №1 обернул декоратор №1 декоратором №2. Но мне стало интересно, а возможно ли написать такой декоратор №2, который стеком декорирует функцию, которая уже задекорирована декоратором №2 так, что бы можно было перехватить параметры декоратора №1 декоратором №2, что бы например проверить параметр который был передан декоратору№1 и в случае его валидности, просто вернуть обратно декоратору№ 1 или как то в дальнейшем выполнить доп. логику, в случае если данные в параметре были не валидные. Проще говоря применить синтаксический сахар над функцией, на которой весит другой сахар с параметрами и вот эти параметры хочу провалидировать.
Жалко что в тг нет чата или хотя бы комментариев к постам)
потому что ютуб комменты не предназначены для цитирования кода и больших обсуждений. Для этого есть форумы, один из них указан в ссылках канала
А почему оператор return невыходит использовать в If если она не внутри функции?
ретурн же это возврат, а если не из функции то откуда возврат?
@@PythonRussian согласен. Но в книге грокаем алгоритмы ретурн в блоке if и это условие не в блоке функции . И пишут запустите этот код. Так же есть тоже самое но уже в блоке функции.
@@PythonRussian книга грокаем алгоритмы в параграфе алгоритм дейкстры
@@PythonRussian большое спасибо что ответили .
@@PythonRussian согласен . Значит в книге ошибка и эта книга не та с которой можно чему то учиться ?
Без 100 грамм не разберешься.
😂😂
ВОпрос один мучает, подстать твоему каналу. МНого где слышу, что нагруженные части питоне, люди пишут на С++, и потом их интегрируют в код. Как это выглядит вообще? Это модуль скомпилированный? в питоне потом подключается через импорт или как? Что там за процедура вообще.. может где туториал есть поизучать? я между конспектами и кодингом отдыхаю изучая вот такие впоросы, что бы поинмать к чему меня может притянуть, и какие навыки пригодятся, а какие нет..
понятия не имею, никогда не занимался, но в некоторых книгах есть раздел об этом, где показывают способ. По мне так это крайне редкая вещь в реальной работе.
Могу быть не прав, но такое, насколько я понимаю, можно сделать с Cython - cython.readthedocs.io/en/latest/src/userguide/wrapping_CPlusPlus.html
Честно, не очень понимаю идею декораторов через сахар. Без сахара понятно, у тебя есть область видимости, там тебе нужна немного другая сумма, там ты её и задекорировал, при этом вне этой области сумма старая. А вот с сахаром... так теперь сумма везде изменена, почему тогда сразу саму сумму не поменять?
для 1 функции и 1 правки возможно, а что если тебе нужно поменять 3 разные функции одинаково? ты полезешь в код всем 3 или сделаешь 1 декоратор?
@@PythonRussian спасибо, теперь стало намного яснее!
И ещё большее спасибо за оперативный комментарий!
Очень мелко. Не видно
Можешь громче делать ролики? Бесит дико
наверное как то могу, посмотрим