Уроки Python casts #6 - Декораторы

  Рет қаралды 142,213

Oleg Molchanov

Oleg Molchanov

Күн бұрын

Мои курсы:
Boosty:
boosty.to/omol...
Patreon:
/ karty-vsekh-41011404
Что такое декораторы в Python, для чего они нужны, как их писать и в каких случаях использовать. Рассматриваем три варианта использования:
1. Декорируем функцию, не принимающую аргументов
2. Декорируем функцию, принимающую аргументы
3. И функция и декоратор принимают аргументы
** ИСХОДНЫЙ КОД **
Основных проектов доступен в Patreon:
/ iskhodnyi-kod-26640469
***
------
🔷 Для донатов. Всегда очень признателен за это:
www.donational...
------
Продолжение серии уроков по языку Python для начинающих. Серия посвящена отдельным темам по программированию на Python.
★ Важно:
Как читать Traceback Python:
• Как читать Traceback P...
Работа с ошибками на примере двух нерабочих парсеров:
• Python: работа с ошибк...
★ Все серии Python casts:
1 - Что вам нужно знать о Pip
• Уроки Python Casts # 1...
2 - Переменные окружения. Использование.
• Уроки Python casts # 2...
3 - Что означает *args, **kwargs
• Уроки Python casts # 3...
#4 - if __name __ == '__main__': что это значит
• Уроки Python casts #4 ...
#5 - Генераторы списков (List comprehension)
• Уроки Python casts #5 ...
#6 - Декораторы
• Уроки Python casts #6 ...
#7 - 5 приемов, о которых вы могли не знать
• Уроки Python casts #7 ...
#8 - Замыкания
• Уроки Python casts #8 ...
#9 - Что такое try... except...
• Уроки Python casts #9 ...
#10 - Что такое yield
• Уроки Python casts #10...
#11 - Как работает функция map()
• Уроки Python casts #11...
#12 - Как работает функция filter()
• Уроки Python casts #12...
#13 - Else у циклов For и While
• Уроки Python casts #13...
★ Плейлисты:
Django 2.x:
• Уроки Django 2.x
Flask:
• Создание блога на Flas...
Боты для Телеграма:
• Telegram боты на Python
Работа с API Вконтакте:
• Работа с API Вконтакте...

Пікірлер: 240
@sergetolmachov2199
@sergetolmachov2199 5 жыл бұрын
Мне 63. Хотел учиться веб-дизайну, но через год понял, что до заработка мой левел в этой жизни уже не поднимется. Теперь занимаюсь чисто для борьбы с альт-геймером ) Так вот, как раз вчера, преодолевая невероятное сопротивление нейронов, заставил их законтачить на понятии Декоратора. На эту СОБАКУ (@) у меня ушёл весь день! А сегодня, слушая Ваше изложение, удивлялся тому, что можно сложные вещи объяснить ПРОСТО! У Вас - БЕЗУПРЕЧНОЕ изложение материала. Я даже не помню, когда я так радовался речи преподавателя!! Грейт грейтфул Вам !! ))
@zaemiel
@zaemiel 5 жыл бұрын
Спасибо большое. Очень рад, что мой контент вам помог
@АйратКаримов-м3п
@АйратКаримов-м3п 4 жыл бұрын
Не боись дед! Все получится! И в 73 года учатся и устраиваются прогерами. А раз уж ты тут(на ютубе) , загугли про это и все поймешь
@driewtonmai
@driewtonmai 4 жыл бұрын
Мое уважение.
@vagifk2864
@vagifk2864 4 жыл бұрын
Дерзайте. Мой папа в 70 лет программировать научился ! На Visual basic
@maskanews
@maskanews 4 жыл бұрын
@@zaemiel а получается def timeit это обычная функция? И выходит любую функцию можно вызвать собакой? Или что-то делает def timeit не функцией, а именно декоратором?
@Python_in_UA
@Python_in_UA 2 жыл бұрын
Дякую. Світлий розум і відкрите серце дають вам змогу бути гарним вчителем. Це рідкісний дар.
@JeDesi
@JeDesi Жыл бұрын
Олег, спасибо огромное за такое разжевывание темы. Ты такие моменты затрагиваешь, которые непонятны интуитивно при изучении, да и к тому, их и сформулировать как вопрос сложно. А ты это объясняешь всё...Респект тебе!
@Russia-Infinity
@Russia-Infinity Жыл бұрын
Автору огромное спасибо, вот сейчас стало понятно крайне доходчиво, зачем нужны Декораторы, чтобы не было лишнего кода помимо основного кода в теле функции!!
@uniqqquniqqq2053
@uniqqquniqqq2053 2 жыл бұрын
Отличное объяснение, спасибо вам
@аавыф-б4о
@аавыф-б4о 3 жыл бұрын
Круто объясняете, всё понятно, спасибо!
@darksouls706
@darksouls706 6 жыл бұрын
очень хорошие касты по python! Подписался )
@jvoorhees
@jvoorhees 4 жыл бұрын
Ну не знай на счет скорости, порой происходит обратное. Возможно что-то изменили в Python на 2020 год, может погрешности или прирост только в Linux, но особой разницы не видно, по крайней мере на Windows. Разница колеблется в районе 0:00:00.000010 Вот некоторое количество результатов: one: 0:00:00.001000 two: 0:00:00.000999 ----------------------------------------- one: 0:00:00.001004 two: 0:00:00.000999 ----------------------------------------- one: 0:00:00.001007 two: 0:00:00.000998 ----------------------------------------- one: 0:00:00.000999 two: 0:00:00.000999 ----------------------------------------- one: 0:00:00.000999 two: 0:00:00.001000 Возможно при сильно нагруженных проектах это пройдет, но на легких точно разницы нет. Возможно я чего-то не понимаю. Как много всего возможного в этом сообщении =)
@adginr
@adginr 5 жыл бұрын
Благодрю.
@TheIfankill
@TheIfankill 3 жыл бұрын
Не понимаю откуда в функции outer в декораторе, передаётся func. Откуда она взялась? Просто интересно, спасибо
@paveldubov1562
@paveldubov1562 2 жыл бұрын
в данном случае `func` - название позиционного параметра под которым подразумевается оригинальная функция (`one`), которая подлежит декорированию
@palyura1162
@palyura1162 5 жыл бұрын
Спасибо, но а код где ?
@IM-gp9yj
@IM-gp9yj 4 жыл бұрын
Очень непонятно когда вы используете темы которые еще не изучили и не дошли до них. Даже судя по вашему плейлисту темы которые вы постоянно упоминаете вы будете объяснять сильно позже. И когда идешь смотреть эту тему там же объясняете через ту тему. Рекурсия какая то.
@simurgh314
@simurgh314 2 жыл бұрын
Порадовал ход твоих мыслей. Люблю когда мысли хронологично опираются друг на друга, создавая правильную логичную последовательность, без темных кусков и взятых неоткуда сущностей. СПАСИБО тебе, амиго, ты один из лучших.
@olgaponomarenko5084
@olgaponomarenko5084 Жыл бұрын
Удивительно ! Лучшее объяснение, которое я встречала, у вас талант объяснять, спасибо)
@nestenerusnester4798
@nestenerusnester4798 6 жыл бұрын
Расскажи про yeild и магические методы
@askorytin-tq4fl
@askorytin-tq4fl 6 жыл бұрын
Как вариант, более короткая форма для парных чисел используя range: >>> l = [x for x in range(2,100,2)] >>> print(l) [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]
@Фанатик-к5т
@Фанатик-к5т 4 жыл бұрын
или l = [x*2 for x in range(1, 500)]
@triceratropical2865
@triceratropical2865 2 жыл бұрын
Здесь я думаю специально "поддали нагрузки", проводя сравнения остатка с нулем.
@victorstepanov3588
@victorstepanov3588 2 жыл бұрын
Да, этот алгоритм покруче
@valeriivolkov_ua
@valeriivolkov_ua 2 жыл бұрын
Там в конце было сказано: "если понравилось - подписывайтесь на канал и ставьте лайки". Понравилось? Да это не то слово! Я в восторге просто! Большое спасибо!
@nocomments9061
@nocomments9061 2 жыл бұрын
Объяснение - огнище. А то один и тот же пример у большинства - с числами Фибоначчи. На кой черт мне городить огород ради такого, где мне в реальности использовать? А тут все объяснения "реального мира": нарушает принципы dry и единой ответственности, да ещё и объяснение без использования сахара. Короче, от души!
@ПростоУлыбка-ш2о
@ПростоУлыбка-ш2о 6 жыл бұрын
_Олег, привет. У тебя замечательные уроки получаются. Очень толково и грамотно объясняешь. А не планируешь ли ты записать полноценный обучающий курс по Python? Прям чтоб с азов (для начинающих) до вершин мастерства?_
@yanagaeify
@yanagaeify 6 жыл бұрын
Можешь воспользоваться этими курсами: этот для начала stepik.org/course/67 этот сложнее stepik.org/course/512 этот самый сложный stepik.org/course/1280
@Alex-yx2ye
@Alex-yx2ye 6 жыл бұрын
Поддерживаю на все 100%
@ПростоУлыбка-ш2о
@ПростоУлыбка-ш2о 6 жыл бұрын
_спасибо за ссылки, Марк, но этих ребят я не знаю, а вот Олег себя отлично поставил. Потому и обращаюсь к нему_
@JohnChrom
@JohnChrom 6 жыл бұрын
Роман Белов присоединяюсь. С удовольствием записался бы.
@callpack96
@callpack96 5 жыл бұрын
Роман Белов было бы круто
@EvgenySigvald
@EvgenySigvald 6 жыл бұрын
Занятный момент - код внутри декоратора на самом верхнем уровне будет выполнен всегда, при инициализации декорируемой функции (на чём собственно и основана работа маршрутизатора упомянутого Flask), это видно при запуске скрипта - вызовов функций нет, но вывод идёт. Было бы здорово акцентировать на этом внимание и дополнить примерами использования. Может даже на отдельный выпуск хватить ) PS: Я ещё не всё посмотрел, может это в другом видео есть, но вдруг )
@zaemiel
@zaemiel 6 жыл бұрын
нет, я на этом не акцентировался. Наверное, действительно следовало об этом сказать...
@suhanoves
@suhanoves 3 жыл бұрын
Для тех кто столкнулся с подобным вопросом, но самостоятельно не может найти на него ответа, вот отличная статья на хабре habr.com/ru/post/141501/
@thesergeymen2632
@thesergeymen2632 6 жыл бұрын
Вот это годнота. Я и до этого с декораторами работал, но не понимал их применение и использовал чуть по-другому.
@АлександрБирюков-о2л
@АлександрБирюков-о2л 6 жыл бұрын
я бы добавил сюда что для того, чтобы декорируемая функция при вызове __name__ возвращала свое имя, нужно wrapper в свою очередь декорировать @functools.wraps(func) из стандартной библиотеки functools, это не обязательно, но бывает очень полезно например при выводе ошибки или при отладке программы
@predatel_rodini
@predatel_rodini 5 жыл бұрын
from flask import session from functools import wraps # standart decorator for selfmade decorators def check_logged_in(func: 'object') -> 'object': @wraps(func) def wrapper(*args, **kwargs): if 'logged_in' in session: return func(*args, **kwargs) return 'You are NOT logged in.' return wrapper
@TahirKabilov
@TahirKabilov 5 жыл бұрын
я вообще декораторами записываю трейсбеки в базу с именем фунции всеми аргументами, если интересно сделаю ссылку на код. чтою велосипед не изобретать
@lonterel4704
@lonterel4704 4 жыл бұрын
@@TahirKabilov давай
@АлексейТаганрогов
@АлексейТаганрогов 3 жыл бұрын
Отличный урок. Единственное что я так и не понял - почему в конце урока, когда добавлена функция outer, аргумент name выводится в консоль два раза (команда print в 7-й строке) ? Когда происходит второе обращение к этой функции print ?
@ЕвгенийБутков-ф3к
@ЕвгенийБутков-ф3к 2 жыл бұрын
удалось разобраться?
@artem_ik-r6s
@artem_ik-r6s 5 жыл бұрын
Олег, как же приятно Вас слушать. Объяснение выше всяких похвал!
@аавыф-б4о
@аавыф-б4о Жыл бұрын
лайк, Олег не сказал только, что вместо 'args' и 'kwargs' мы можем написать любые другие идентификаторы (имена), хоть 'parampam1' и 'parampam2', - это НЕ специмена (или какие-то операторы языка), а просто договорились так называть эти параметры в подобных случаях - а вообще это просто параметры, которые можно назвать как угодно (главное - поставить зведочки '*' и '**"). трудно понять зачем объяснять, тем для кого это ну очень очевидно (тебе), но новичков это реально путает и вымораживает: что такое 'args', что такое 'kwargs' (это особенно страшное слово), и почему они везде. а это просто название от балды двух параметров, и сокращение от фраз 'arguments' и 'keyword arguments'. они прям реально на этом месте запинаются, как минимум, и долго (до полугода) постоянно возвращаются к этому, как максимум. это резко углубит объяснение, в то же время не усложняя его. возможно, ты заострял внимание на этом моменте в каком-то другом ролике
@tier61wro
@tier61wro 8 ай бұрын
Спасибо большое за контент, единствеенное, если заглянуть глубоко получается, что декораторы это частные случаи замыканий. Возможно стоило сначала рассказать о замыканиях а потом уже о декораторах.
@sweetstranger4029
@sweetstranger4029 2 жыл бұрын
В состоянии кто-нибудь объяснить по какому принципу в декорирующую функцию дальше пробрасываются аргументы изначальной функции ??? Т.е. есть такой пример, допустим : def wrapper(func): def inner(arg): print('Start wrapp') func(arg) print('Wrapp end') return inner def text(arg : str): print('Here is a simple text '+ arg) text = wrapper(text) text('mmm, okay') Переопределяем имя text , в декоратор кидаем объект функции text. Возвращается декоратор, который почему-то принимает просто так "arg". Как именно мы передали arg ?
@АрТём-п8к4д
@АрТём-п8к4д 3 жыл бұрын
подскажите в чем разницы между import datetime и from datetime import datetime. я думал что импортируя весь модуль я сразу буду иметь доступ ко всем его плюшкам но тут это не прокатило просто импортирую датувремя я не получил метод now а вот импортируя методом фром***импорт*** я получил метод now. странно но у меня оба метода выводятся с одинаковой скорости то есть счетчики показываю стандартно сотую секунды.
@andrewzh4660
@andrewzh4660 2 жыл бұрын
Повторил эксперимент. Для последовательности 10**8 списочный генератор срабатывает на полсекунды медленнее в 6 из 7 случаев
@MrCher666
@MrCher666 4 жыл бұрын
ПФ ... Мужик.... Здоровья тебе, хахаха, ибо я столько стучался, что бы понять как работает декоратор, а ты нормально объяснил всё на адекватных примерах. Спасибо огромное
@eugenkirya9476
@eugenkirya9476 2 жыл бұрын
Капец!!! перелопатил кучу документации - не понял... тут за 15 мин всё ясно!!! СПС
@ChikivaraTV
@ChikivaraTV 5 жыл бұрын
Бог программирования, спасибо большое, за доступное и наглядное объяснение!
@artemlevin8982
@artemlevin8982 Жыл бұрын
я не понимал,что такое декоративы, но с помощью тебя я понял все. Спасибо!
@sda1564
@sda1564 3 жыл бұрын
Привет! Всегда воспринимал декораторы как нечто сложное, но благодаря тебе с легкостью разобрался Огромное спасибо за этот урок и все остальные!
@BloodGraber
@BloodGraber 4 жыл бұрын
Все грамотно и информативно разложено по полочкам. Большое спасибо за Ваш труд!
@melancholic_017
@melancholic_017 Жыл бұрын
Мужик, я бы тебе дал) Заплатил бабки за курс, а учат меня такие интузиасты как ты, спасибо!
@xurry4988
@xurry4988 Жыл бұрын
я пишу в пайчарме и самое смешное это то, что время разное выдает, иногда генератор быстрее, иногда медленее
@Пранкадемия
@Пранкадемия 3 жыл бұрын
Спасибо! Приятно когда объясняет тему не просто человек который знает сам, но и который именно умеет объяснять! Редкость!
@abrosovd
@abrosovd Жыл бұрын
11:54 при запуске видно, что второй вызов происходит дольше чем первый :)
@МартовСергей-й3я
@МартовСергей-й3я Жыл бұрын
Очень внятное и доступное объяснение роли декораторов! Жаль, что Вас на степике нет.
@chalex2k
@chalex2k 2 жыл бұрын
0:20 пример, в котором следует использовать декораторы 7:21 о функциях как объектах 7:58 декоратор функции, не принимающей аргументы 10:46 добавление аргументов в функцию 12:07 как работает синтаксический сахар @decorator 15:49 добавление аргументов декоратора
@denisden6222
@denisden6222 4 жыл бұрын
Поскольку l1 = результат ВЫПОЛНЕНИЯ функции timeit, а результат выполнения этой функции = return wrapper, то в итоге, l1 = wrapper (то, что вернуло выполнение функции timeit). Спасибо за это пояснение! Никак не мог понять почему так происходит)
@perdoshmitten8389
@perdoshmitten8389 Жыл бұрын
Наверное круто генератором называть включения..
@microsoft8792
@microsoft8792 Жыл бұрын
а если перед определением функции больше одного декоратора указано?
@getteg6468
@getteg6468 2 жыл бұрын
на 12 минуте видно, что генератор стал работать медленнее чем цикл..
@nordmilk
@nordmilk 3 жыл бұрын
я 5 лет пытался понять что это, а автор этого урока расказал за 7 минут
@ivanbag9741
@ivanbag9741 4 жыл бұрын
Отличное изложение! Пример то что надо! Смотрел другие видосы про декораторы, читал. На таких кривых примерах объяснялось всё, что не понятно было для чего городить огород. Спасибо!
@АндрейИнвентор
@АндрейИнвентор 2 жыл бұрын
Спасибо за понятное объяснение на пальцах!
@zolotaya_pora
@zolotaya_pora 7 ай бұрын
лучшее объяснение про декораторы!
@nikitadenisov166
@nikitadenisov166 5 жыл бұрын
Но разве функция two генератор. Я просто думал, что это list comprehension. А генератор, это где yeld . Где я не прав?
@zaemiel
@zaemiel 5 жыл бұрын
а разве я не сказал "Генератор Списка"?
@nikitadenisov166
@nikitadenisov166 5 жыл бұрын
@@zaemiel извините, наверное не услышал. Честно не ожидал, что вы ответите.
@f00b4r123
@f00b4r123 3 жыл бұрын
Вы путаете Generator с List comprehension а это не одно и то же. docs.python.org/3/howto/functional.html#generator-expressions-and-list-comprehensions
@arhangelist
@arhangelist 3 жыл бұрын
Довольно наивно полагать, будто [хорошо разбирающийся в предмете разговора] автор путается в таких вещах - уже это должно было Вас насторожить. За первую минуту ролика _трижды_ сказано, что речь именно о генераторах СПИСКОВ (list comprehensions) - будьте пожалуйста внимательней.
@qut609
@qut609 Жыл бұрын
Безусловно, всё хорошо. Но тема капец сложная, даже с всеми этими объяснениями я не смог нормально понять как делать эти декораторы. Но понять для чего они хотя бы удалось. В любом случае спасибо за потраченное время и удачи в следующих роликах
@Zeding_Stuff
@Zeding_Stuff Жыл бұрын
а что конкретно непонятно? Я разобрался, если что могу помочь объяснить
@spider_godess_adept3313
@spider_godess_adept3313 2 жыл бұрын
Большое спасибо, очень приятное и подробное объяснение!
@ralfralfforas6761
@ralfralfforas6761 3 жыл бұрын
Сделай шрифт крупнее плохо видно 😀
@Dennis_Ritchie
@Dennis_Ritchie Жыл бұрын
офигенный пример с datetime
@davitkhachatryan5100
@davitkhachatryan5100 2 жыл бұрын
Ребята есть вопрос: Тоесть если перед опбявление функцией указан декоратор(@), тогда сама функция и функция-декоратора выполняются вместе ?
@paveldubov1562
@paveldubov1562 2 жыл бұрын
вызывается функция-декоратор в теле которой выполняется вызов функции, над которой указана собака (@)
@ulukbecturatbecov9884
@ulukbecturatbecov9884 Жыл бұрын
Вроде эффективность алгоритмов замеряется не скоростью выполнения , а количеством шагов для завершения
@zaemiel
@zaemiel Жыл бұрын
видео не об этом
@АртемЖучков-з4д
@АртемЖучков-з4д 4 жыл бұрын
Олег, спасибо! Теперь то все понятно наконец =) Я уже не первый десяток видео про декораторы смотрю, твое будет последним, ибо после него вопросов не остается совсем)
@Larriva666
@Larriva666 Жыл бұрын
Сложное объяснение. Вообще не на пальцах.
@Gleb_Pastushenko
@Gleb_Pastushenko 3 жыл бұрын
Здравствуйте. На 15:40, если я всё правильно понял, то это синтаксический сахар не для l1 = timeit(one), а для замены one = timeit(one)? На 17:20 получается, что код между timeit и outer будет выполнен уже на этапе декорирования, т.е. ещё до вызова декорируемой функции? Если да, то не очень понятно для чего это нужно.
@MELkey3
@MELkey3 5 жыл бұрын
Не понял, а как декоратор понял что декорируемую функцию надо было передать в функцию outer? заранее спасибо за ответ
@fffoxed1
@fffoxed1 5 жыл бұрын
ни как, он же просто возвращает саму функцию outer
@maxmorgan9025
@maxmorgan9025 6 жыл бұрын
Спасибо, да да и про замыкания. Пожалуйста.
@timursafin5214
@timursafin5214 6 жыл бұрын
Для чего нужна функция wrapper?
@zaemiel
@zaemiel 6 жыл бұрын
Затем, что у вас не получится обернуть функцию в какой-то код без этой служебной функции. Поэкспериментируйте. Это важно (я имею в виду играться и экспериментировать)
@volsof
@volsof Жыл бұрын
Очень понятно рассказано, спасибо!
@paulboss5524
@paulboss5524 6 жыл бұрын
крутой чувак)
@коньвпальто-ч6у
@коньвпальто-ч6у 3 жыл бұрын
Спасибо, наконец я понял как они работают и для чего нужны эти декораторы 👍
@rugineer
@rugineer 6 жыл бұрын
Прикольно, что на 11:56 время создания списка через for меньше, чем через генератор. Понятно, что это погрешность, но всё же)
@devZu9
@devZu9 6 жыл бұрын
Я кстати это тоже заметил. Вообще как только он обернул всё в декоратор, то почему-то скорость у for значительно возросла. А когда он сменил 10**4 на 10000, так вот for ещё и вышел в лидеры по скорости.
@asaki1k
@asaki1k 3 жыл бұрын
@@devZu9 предполагаю, потому что в цикле 10**4 считалось снова и снова каждую итерацию, а в той конструкции результат запоминался
@DavidHill1980
@DavidHill1980 6 жыл бұрын
Oleg восхищаюсь упорством… не прекращай создавать контент
@predatel_rodini
@predatel_rodini 5 жыл бұрын
from flask import session from functools import wraps # standart decorator for selfmade decorators def check_logged_in(func: 'object') -> 'object': @wraps(func) def wrapper(*args, **kwargs): if 'logged_in' in session: return func(*args, **kwargs) return 'You are NOT logged in.' return wrapper
@МаксимСкочко-р6у
@МаксимСкочко-р6у 2 жыл бұрын
А в каком редакторе вы пишите?
@herrschwarzfuchs
@herrschwarzfuchs 5 жыл бұрын
на 9.42 м. запустил у себя. Получил TypeError: 'list' object is not callable. Когда привел к виду l1 = one l2 = two (без скобок) заработало без ошибок. Вопрос, что это было?
@uawakeme
@uawakeme 5 жыл бұрын
Не очень понял, в когда и где именно происходит вызов функции wrapper?
@uawakeme
@uawakeme 5 жыл бұрын
Сам поигрался с кодом и разобрался!
@salamattulkibayev8456
@salamattulkibayev8456 6 жыл бұрын
Take a like from the beginning))
@rubickaghanimus4423
@rubickaghanimus4423 4 жыл бұрын
Спасибо ваша лекция сильно помогла!
@РоманБодю
@РоманБодю 4 жыл бұрын
А я вот убедился в обратном. Даже запустил несколько раз для проверки и результат не однозначный.1)0:00:00.000976 и 0:00:00.000978. 2) 0:00:00.000976 0:00:00.001952. 3) 0:00:00.001953 и 0:00:00.000977. 4)0:00:00.000976 и 0:00:00.000977. У меня догадки только 2 - 1) Скачки производительности и 2) в Python 3.8 этот механизм мог быть оптимизирован.
@artemmozorow7902
@artemmozorow7902 3 жыл бұрын
9:37
@alexanderpadalka5708
@alexanderpadalka5708 3 жыл бұрын
@go5190
@go5190 6 жыл бұрын
Спасибо!
@vovaysach
@vovaysach 3 жыл бұрын
Спасибо большое! очень понятно, а то читал в паре мест, смотрел в курсах - там плохо было рассказано.
@deceivedxchild
@deceivedxchild 4 жыл бұрын
Из двух других видеоуроков с горем пополам понял, что такое декораторы, но совершенно не понял их предназначение - муть какая-то. Уже думал, что на этой теме мои способности иссякают, но погуглил и попал сюда - тут всё понятно сразу же, тк что это не у меня способности иссякают, а спсобность объяснять - у тех преподов, которых смотрел. Большое спасибо!
@mertvetilo4197
@mertvetilo4197 6 жыл бұрын
Если кому интересно узнать про время выполнения разных инструкций, то вам сюда kzbin.info/www/bejne/oqnFXomjqN2EqKs&index=4&list=PLjZB6OQYJUCyg6x051KxTcmQz5d4N76hk
@killedbywolf3112
@killedbywolf3112 2 жыл бұрын
Что за лев этот тигр?
@АнтонДемченко-д6т
@АнтонДемченко-д6т Жыл бұрын
айна2нацала
@Newyork00
@Newyork00 5 жыл бұрын
Олег, добрый день. Сможете подсказать логику Питона исходя из следующего кода: Код стоит считать бессмысленным. Была просто практика с декораторами. def PlusN(func): def wrapper(n): print('1', n) n += 2 print('2', n) result = func(n) return wrapper @PlusN def CountN(n): print('3', n) print(n ** 2) #CountN(3) wrap = PlusN(CountN) print(wrap) countN = wrap(3) Вопрос в том, что на выходе ответ будет 49. Я понимаю, что питон вызывает 2 раза wrapper. Но при этом только 1 раз CountN. Если декоратор закомментить, то будет ожидаемая цифра 25. Спасибо.
@boobakiki1365
@boobakiki1365 Жыл бұрын
Олег,спасибо за Ваш труд , Вам удалось с такой лёгкостью донести такую непростую тему..Вы один из лучших преподавателей , которых я встречал !
@Makumazaan
@Makumazaan 4 жыл бұрын
Это не касается данного урока, но в этих конкретных примерах оптимальнее было бы убрать control flow statement используя третий аргумент "step" в функции range. even = [num for num in range(0, 10**4, 2)]
@АйратКаримов-м3п
@АйратКаримов-м3п 4 жыл бұрын
добрый день. Почему нельзя в предпоследний return(который перед return wrapper стоит в функции timeit) вставить func(*args,**kwargs) сразу? Так работает быстрее
@ezez2586
@ezez2586 3 жыл бұрын
а почему при указании func в скобках вызывалась именно функция one, а не two?
@yerlan2100
@yerlan2100 6 жыл бұрын
Спасибо, Олег! Отличные уроки у Вас! Продолжайте в том же духе.
@khnykaq8823
@khnykaq8823 Жыл бұрын
офигеть
@Dtankhaev
@Dtankhaev Жыл бұрын
Лучший!
@vitalyvlasenko5495
@vitalyvlasenko5495 2 жыл бұрын
12:00 генератор отработал медленнее) думаю, дело в том, что генератор сразу резервирует место, а при вызове метода append() иногда приходится переносить весь список в новую область памяти.
@Всепровсе-б2х
@Всепровсе-б2х 3 жыл бұрын
Спасибо
@ВладимирДолгополов-ц5ф
@ВладимирДолгополов-ц5ф 2 жыл бұрын
Три дня разбираюсь с декораторами. И только из этого видео понял, что это за зверь!)
@accidiet
@accidiet 6 жыл бұрын
шикарная архитектура Python ,,,, ох я счастлив ! Истина со мной
@alexr7530
@alexr7530 4 жыл бұрын
Спасибо, полезно. Но с рэпера чет все равно весь видос угарал
@AlexandrSpirit
@AlexandrSpirit 4 жыл бұрын
на 12й секунде, функция two неожиданно стала дольше работать! Тогда как ранее была быстрее чем one. Из-за чего?
@MAIVSHOW
@MAIVSHOW 4 жыл бұрын
13:18, можно просто: l1 = one print(l1(10))
@johnwoods978
@johnwoods978 4 жыл бұрын
красава. монстр.
@undefined422
@undefined422 2 жыл бұрын
@@johnwoods978 print(one(10)) ПРОСТО МАШИНА
@alinaveter7371
@alinaveter7371 2 жыл бұрын
Просто обязана отписаться, что разжевано действительно восхитительно, спасибо от всей души!
@Vologdos
@Vologdos 4 жыл бұрын
[x for x in range(10**9) if x % 3 == 0] >>> Memory Error =) (P.S. Надо больше оперативки? )
Уроки Python casts # 3 - Что означает *args, **kwargs
12:13
Every parent is like this ❤️💚💚💜💙
00:10
Like Asiya
Рет қаралды 14 МЛН
🍉😋 #shorts
00:24
Денис Кукояка
Рет қаралды 3,5 МЛН
Amazing Parenting Hacks! 👶✨ #ParentingTips #LifeHacks
00:18
Snack Chat
Рет қаралды 23 МЛН
Уроки Python casts #8 - Замыкания
10:30
Oleg Molchanov
Рет қаралды 47 М.
ДЕКОРАТОР PYTHON / ВСЕ ЧТО НУЖНО ЗНАТЬ НА СОБЕСЕ
28:31
Сергей Соловьев
Рет қаралды 2,9 М.
Программисты-самоучки... Слушайте внимательно.
22:45
Евгений Афанасьев
Рет қаралды 75 М.
Уроки Python casts #10 - Что такое yield
9:42
Oleg Molchanov
Рет қаралды 70 М.