Первый декоратор, разбираемся с написанием

  Рет қаралды 12,059

Python Russian

Python Russian

3 жыл бұрын

Попробуем написать декоратор и разобраться что это такое, для чего он нужен.
Вообще декоратор - это паттерн программирования и используется во многих языках, важное отличие что в 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

Пікірлер: 72
@viktorsokolov8153
@viktorsokolov8153 Жыл бұрын
Уважаемый автор, у вас безусловный преподавательский талант. Это видно по многим видео. В каждом вы не спеша очень доступно разъясняете новичкам тему. И, что важно, морально поддерживаете их. Спасибо за ваш труд и желание поделиться знаниями! По теме декораторов. Понимание для меня приходило последовательно. Я познакомился с ними 3 месяца назад. Нельзя сказать, что объяснение (на другом канале) было плохое. Скорее, просто понадобилось определенное время, чтобы переварить это. Наконец-то пищеварение справилось) Спасибо автору канала.
@Miron_MipoX
@Miron_MipoX 11 ай бұрын
полностью согласен. у меня имеется доступ к платным курсам от коробки, там эти информацию упаковали в 9 минут. и в основном автор просто диктует что пишет. а не пытается объяснять свои действия. и нет, они не так уж плохи, но автор Python Russia пишет видео от души так сказать)
@user-dd8yw4cl3i
@user-dd8yw4cl3i 2 жыл бұрын
Спасибо огромное за уроки, безумно полезно и доступно!
@PythonRussian
@PythonRussian 2 жыл бұрын
благодарю за теплые слова. К сожалению, сейчас совсем нет времени на новые видео, но после нового года постараюсь еще пару полезностей заснять.
@user-gc4ic9xc1j
@user-gc4ic9xc1j Жыл бұрын
Вот просто большое спасибо, никакой воды, все понятным языком, как для кирпича все очень даже понял, автору большое спасибо
@y18kotov
@y18kotov Жыл бұрын
С 100500 попытки стало понятно. Спасибо!
@_Kruzo_
@_Kruzo_ Жыл бұрын
Все доступно и без лишней воды....хотя, в фоне как будто вода льется перед микрофоном :))
@donfedor007
@donfedor007 Жыл бұрын
Спасибо Вам за видео! Очень понятно и интересно!
@Yuriy_ko
@Yuriy_ko Жыл бұрын
Спасибо за урок! После просмотра, закрепил написанием собственного декоратора и опробовал на разных функциях. Осталось переварить, зачем он нужен(практическое применение), но это дело времени и много практики.
@Miron_MipoX
@Miron_MipoX 11 ай бұрын
не жалко писать коменты автору, который делает очень годный контент!
@IlyaIlya_lopkop
@IlyaIlya_lopkop 3 жыл бұрын
Это не видео, а бомба!
@PythonRussian
@PythonRussian 3 жыл бұрын
не уверен, что ты искренен=) по-моему немного путано получилось и не понятно
@IlyaIlya_lopkop
@IlyaIlya_lopkop 3 жыл бұрын
@@PythonRussian нуу не знаю, я просто декораторы уже проходил, поэтому мне все понятно было. Это надо спросить у тех кто впервые о таком слышит
@abra-kadabra5000
@abra-kadabra5000 11 ай бұрын
Спасибо! Действительно очень круто объясняете, это талант!
@artyomk1476
@artyomk1476 Жыл бұрын
ТЫ просто ТОП! Спасибо за то что так круто объясняешь!!!!!
@kumushabdurahmanova7822
@kumushabdurahmanova7822 2 жыл бұрын
Ждем вторую часть!)
@PythonRussian
@PythonRussian 2 жыл бұрын
пока времени не хватает, но сделаю
@SoloveY1990
@SoloveY1990 Жыл бұрын
Большое спасибо! Достаточно сложно понять с первого раза что произошло)) понял, что декоратор это некий апгрейд существующих или даже импортированных функций под наши задачи.
@nons5761
@nons5761 9 ай бұрын
лучшее обьяснение, обожаю твой канал
@jackhopckien4566
@jackhopckien4566 6 ай бұрын
Спасибо. Подробно и понятно.
@barma1309
@barma1309 Жыл бұрын
Прекрасно!!!
@rpuropu
@rpuropu 3 жыл бұрын
сегодня пойду под твой канал пару общих тетрадок куплю).. ьуду раскрывать темы до конца, со всеми ссылками)
@PythonRussian
@PythonRussian 3 жыл бұрын
вот это светлая мысль! не потому что канал, а то что будешь конспектировать и читать по ссылкам и в книжках - это просто круто помогает в развитии. У самого старые конспекты лежат по питону =) Отработали свое и принесли свою пользу.
@user-ch3lo3my5j
@user-ch3lo3my5j 3 жыл бұрын
Я это с самого начала делаю👍🏻
@igormatveev8355
@igormatveev8355 3 ай бұрын
большое спасибо за материал, но как же тихо, это жесть
@Prodigyqqq
@Prodigyqqq Ай бұрын
Весь ютуб лучше смотреть с включенной тонокомпенсацией в Realtek
@andreiart9160
@andreiart9160 2 жыл бұрын
Контент - пушка_ракета!
@ValeriyM_46
@ValeriyM_46 9 ай бұрын
отлично объяснил ))) эффект прозрения получил , спасибо)).подпись: горемыка )))
@CRESHT
@CRESHT Жыл бұрын
Круто! Кое что дошло, но практика все решает
@PythonRussian
@PythonRussian Жыл бұрын
да, без практики в нашем деле никуда
@spiritgame4266
@spiritgame4266 2 жыл бұрын
Крутая идея - создать декоратор, который заворачивает функцию в thread и запускает его.
@PythonRussian
@PythonRussian 2 жыл бұрын
идея хорошая, главное понимать, что там в функции будет происходить и не забывать про GIL
@stevem4806
@stevem4806 10 ай бұрын
Спасибо!
@Laserball74
@Laserball74 Жыл бұрын
Просьба в следующих видео сделать шрифт по крупнее так как Вас смотрят люди и с плохим зрением!
@PythonRussian
@PythonRussian Жыл бұрын
да, я стараюсь, просто если сильно увеличивать то на экране мало входит и приходится скроллить туда сюда.
@user-do4nq3fr6t
@user-do4nq3fr6t 3 жыл бұрын
да, на первых порах сложно =) но зато информативно
@user-kh5vi4yi5t
@user-kh5vi4yi5t 7 ай бұрын
Спасибо за урок. Вы хорошо объяснили что такое декоратор, но не объяснили зачем он нужен. из урока ясно, что функцию sum() можно использовать без всех этих танцев с бубном. Так что урок либо следует переработать, либо сделать предварительное введение в декораторы где рассказать, зачем они нужны.
@andrey6951
@andrey6951 2 күн бұрын
Алексей Леонов!
@user-rm4yr9xr4r
@user-rm4yr9xr4r Ай бұрын
Спасибо ! А почему в выводе значение основной функции (5) идёт после "обертки " декоратора "до" и "после" ?
@drarov91
@drarov91 Жыл бұрын
@Python_Russian, как вы прикрепляете функцию print в конце строки и она автоматически встает в начало?
@PythonRussian
@PythonRussian Жыл бұрын
пичарм так умеет, у меня есть видео по комбинациям клавиш и фишкам.
@725etw7w
@725etw7w Жыл бұрын
Здравствуйте, почему мы не можем вызывать враппер с тремя аргументами и третьм передавать func(как объект), и всё будет одно и тоже? Или это так делать не надо?
@alw-3052
@alw-3052 2 жыл бұрын
Спасибо. Не сразу, но разобрался. Получается мы первой командой 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)) ##############################
@PythonRussian
@PythonRussian 2 жыл бұрын
Первое преимущество - встроенное средство языка, которое грех не использовать, второе и самое главное - придется импортировать и писать твой логгер везде, представь что сумм у нас в 15 модулях используется по коду. А декоратором 1 раз декорировали саму функцию и она везде работает одинаково.
@alw-3052
@alw-3052 2 жыл бұрын
@@PythonRussian да, про дублирование я не додумался. Спасибо!
@kan4317
@kan4317 3 жыл бұрын
wrapper должен получать как *args так и **kwargs, иначе аргументы переданные по ключу не передадутся в оборочиваемую функцию, а в классе он должен еще и принимать self
@PythonRussian
@PythonRussian 3 жыл бұрын
допустим, а еще параметризованый декоратор можно писать. А тема конкретно этого ролика какая?
@kan4317
@kan4317 3 жыл бұрын
@@PythonRussian, Ладно, но про kwards можнг было и тут упомянуть, боюсь многие посыпятся на этом
@Miron_MipoX
@Miron_MipoX 4 ай бұрын
возможно глупый вопрос. но вот стало интересно. Попалась такая задача, где имеется функция, уже задекорированная декоратором №1 и она с параметром. Мне нужно было обернуть декоратор №1 своим декоратором № 2. Я конечно сделал по самому очевидному пути. Перед местом, где функция декорируется декоратором №1 обернул декоратор №1 декоратором №2. Но мне стало интересно, а возможно ли написать такой декоратор №2, который стеком декорирует функцию, которая уже задекорирована декоратором №2 так, что бы можно было перехватить параметры декоратора №1 декоратором №2, что бы например проверить параметр который был передан декоратору№1 и в случае его валидности, просто вернуть обратно декоратору№ 1 или как то в дальнейшем выполнить доп. логику, в случае если данные в параметре были не валидные. Проще говоря применить синтаксический сахар над функцией, на которой весит другой сахар с параметрами и вот эти параметры хочу провалидировать.
@Miron_MipoX
@Miron_MipoX 4 ай бұрын
Жалко что в тг нет чата или хотя бы комментариев к постам)
@PythonRussian
@PythonRussian 4 ай бұрын
потому что ютуб комменты не предназначены для цитирования кода и больших обсуждений. Для этого есть форумы, один из них указан в ссылках канала
@Himera1983
@Himera1983 3 ай бұрын
А почему оператор return невыходит использовать в If если она не внутри функции?
@PythonRussian
@PythonRussian 3 ай бұрын
ретурн же это возврат, а если не из функции то откуда возврат?
@Himera1983
@Himera1983 3 ай бұрын
@@PythonRussian согласен. Но в книге грокаем алгоритмы ретурн в блоке if и это условие не в блоке функции . И пишут запустите этот код. Так же есть тоже самое но уже в блоке функции.
@Himera1983
@Himera1983 3 ай бұрын
@@PythonRussian книга грокаем алгоритмы в параграфе алгоритм дейкстры
@Himera1983
@Himera1983 3 ай бұрын
@@PythonRussian большое спасибо что ответили .
@Himera1983
@Himera1983 3 ай бұрын
@@PythonRussian согласен . Значит в книге ошибка и эта книга не та с которой можно чему то учиться ?
@user-zt9vo4gh3p
@user-zt9vo4gh3p 4 ай бұрын
Без 100 грамм не разберешься.
@RAYDER999
@RAYDER999 8 күн бұрын
😂😂
@randomcraft2345
@randomcraft2345 Жыл бұрын
Честно, не очень понимаю идею декораторов через сахар. Без сахара понятно, у тебя есть область видимости, там тебе нужна немного другая сумма, там ты её и задекорировал, при этом вне этой области сумма старая. А вот с сахаром... так теперь сумма везде изменена, почему тогда сразу саму сумму не поменять?
@PythonRussian
@PythonRussian Жыл бұрын
для 1 функции и 1 правки возможно, а что если тебе нужно поменять 3 разные функции одинаково? ты полезешь в код всем 3 или сделаешь 1 декоратор?
@randomcraft2345
@randomcraft2345 Жыл бұрын
@@PythonRussian спасибо, теперь стало намного яснее! И ещё большее спасибо за оперативный комментарий!
@rpuropu
@rpuropu 3 жыл бұрын
ВОпрос один мучает, подстать твоему каналу. МНого где слышу, что нагруженные части питоне, люди пишут на С++, и потом их интегрируют в код. Как это выглядит вообще? Это модуль скомпилированный? в питоне потом подключается через импорт или как? Что там за процедура вообще.. может где туториал есть поизучать? я между конспектами и кодингом отдыхаю изучая вот такие впоросы, что бы поинмать к чему меня может притянуть, и какие навыки пригодятся, а какие нет..
@PythonRussian
@PythonRussian 3 жыл бұрын
понятия не имею, никогда не занимался, но в некоторых книгах есть раздел об этом, где показывают способ. По мне так это крайне редкая вещь в реальной работе.
@leonidpervak9624
@leonidpervak9624 2 жыл бұрын
Могу быть не прав, но такое, насколько я понимаю, можно сделать с Cython - cython.readthedocs.io/en/latest/src/userguide/wrapping_CPlusPlus.html
@kan4317
@kan4317 3 жыл бұрын
Можешь громче делать ролики? Бесит дико
@PythonRussian
@PythonRussian 3 жыл бұрын
наверное как то могу, посмотрим
@dedovchemodanchik
@dedovchemodanchik 9 ай бұрын
Очень мелко. Не видно
Неприятная Встреча На Мосту - Полярная звезда #shorts
00:59
Полярная звезда - Kuzey Yıldızı
Рет қаралды 1,8 МЛН
СНЕЖКИ ЛЕТОМ?? #shorts
00:30
Паша Осадчий
Рет қаралды 7 МЛН
Which one of them is cooler?😎 @potapova_blog
00:45
Filaretiki
Рет қаралды 8 МЛН
Замыкания (Closures) в Python
30:54
Python Russian
Рет қаралды 14 М.
Частые ошибки начинающих питонистов
41:43
Лямбды. Не такие и страшные
36:37
Python Russian
Рет қаралды 9 М.
THE MOST FREQUENT MISCONCEPTIONS ABOUT OOP
19:37
ExtremeCode
Рет қаралды 540 М.
Python Decorators in 15 Minutes
15:14
Kite
Рет қаралды 425 М.
Декораторы в Python
19:45
Программирование 2.0
Рет қаралды 13 М.
Основы Asyncio
53:25
Python Russian
Рет қаралды 11 М.
Как устроены декораторы в python?
12:18
Хитрый питон
Рет қаралды 14 М.