Тёмный

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

Oleg Molchanov
Подписаться 79 тыс.
Просмотров 141 тыс.
50% 1

Мои курсы:
Boosty:
boosty.to/omolchanov/posts/99...
Patreon:
/ karty-vsekh-41011404
Что такое декораторы в Python, для чего они нужны, как их писать и в каких случаях использовать. Рассматриваем три варианта использования:
1. Декорируем функцию, не принимающую аргументов
2. Декорируем функцию, принимающую аргументы
3. И функция и декоратор принимают аргументы
** ИСХОДНЫЙ КОД **
Основных проектов доступен в Patreon:
/ iskhodnyi-kod-26640469
***
------
🔷 Для донатов. Всегда очень признателен за это:
www.donationalerts.ru/r/omolc...
------
Продолжение серии уроков по языку 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 Вконтакте...

Опубликовано:

 

2 июн 2018

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 243   
@sergetolmachov2199
@sergetolmachov2199 5 лет назад
Мне 63. Хотел учиться веб-дизайну, но через год понял, что до заработка мой левел в этой жизни уже не поднимется. Теперь занимаюсь чисто для борьбы с альт-геймером ) Так вот, как раз вчера, преодолевая невероятное сопротивление нейронов, заставил их законтачить на понятии Декоратора. На эту СОБАКУ (@) у меня ушёл весь день! А сегодня, слушая Ваше изложение, удивлялся тому, что можно сложные вещи объяснить ПРОСТО! У Вас - БЕЗУПРЕЧНОЕ изложение материала. Я даже не помню, когда я так радовался речи преподавателя!! Грейт грейтфул Вам !! ))
@zaemiel
@zaemiel 5 лет назад
Спасибо большое. Очень рад, что мой контент вам помог
@user-fk2cq4ff4k
@user-fk2cq4ff4k 4 года назад
Не боись дед! Все получится! И в 73 года учатся и устраиваются прогерами. А раз уж ты тут(на ютубе) , загугли про это и все поймешь
@driewtonmai
@driewtonmai 4 года назад
Мое уважение.
@vagifk2864
@vagifk2864 4 года назад
Дерзайте. Мой папа в 70 лет программировать научился ! На Visual basic
@maskanews
@maskanews 4 года назад
@@zaemiel а получается def timeit это обычная функция? И выходит любую функцию можно вызвать собакой? Или что-то делает def timeit не функцией, а именно декоратором?
@olgaponomarenko5084
@olgaponomarenko5084 Год назад
Удивительно ! Лучшее объяснение, которое я встречала, у вас талант объяснять, спасибо)
@valeriivolkov_ua
@valeriivolkov_ua 2 года назад
Там в конце было сказано: "если понравилось - подписывайтесь на канал и ставьте лайки". Понравилось? Да это не то слово! Я в восторге просто! Большое спасибо!
@user-rn4br6kq4c
@user-rn4br6kq4c Год назад
Автору огромное спасибо, вот сейчас стало понятно крайне доходчиво, зачем нужны Декораторы, чтобы не было лишнего кода помимо основного кода в теле функции!!
@simurgh314
@simurgh314 2 года назад
Порадовал ход твоих мыслей. Люблю когда мысли хронологично опираются друг на друга, создавая правильную логичную последовательность, без темных кусков и взятых неоткуда сущностей. СПАСИБО тебе, амиго, ты один из лучших.
@artemlevin8982
@artemlevin8982 Год назад
я не понимал,что такое декоративы, но с помощью тебя я понял все. Спасибо!
@user-yz7on6nc9l
@user-yz7on6nc9l 4 года назад
Олег, как же приятно Вас слушать. Объяснение выше всяких похвал!
@Python_in_UA
@Python_in_UA Год назад
Дякую. Світлий розум і відкрите серце дають вам змогу бути гарним вчителем. Це рідкісний дар.
@yerlan2100
@yerlan2100 6 лет назад
Спасибо, Олег! Отличные уроки у Вас! Продолжайте в том же духе.
@BloodGraber
@BloodGraber 4 года назад
Все грамотно и информативно разложено по полочкам. Большое спасибо за Ваш труд!
@boobakiki1365
@boobakiki1365 Год назад
Олег,спасибо за Ваш труд , Вам удалось с такой лёгкостью донести такую непростую тему..Вы один из лучших преподавателей , которых я встречал !
@thesergeymen2632
@thesergeymen2632 5 лет назад
Вот это годнота. Я и до этого с декораторами работал, но не понимал их применение и использовал чуть по-другому.
@user-pq6jv2hr5c
@user-pq6jv2hr5c 3 года назад
Спасибо! Приятно когда объясняет тему не просто человек который знает сам, но и который именно умеет объяснять! Редкость!
@vladimirkulakov6126
@vladimirkulakov6126 2 года назад
Спасибо Олег! Ваши видео очень полезны для расширения понимания материала
@user-sd3tt9jp7x
@user-sd3tt9jp7x Год назад
Спасибо за понятное объяснение на пальцах!
@sda1564
@sda1564 2 года назад
Привет! Всегда воспринимал декораторы как нечто сложное, но благодаря тебе с легкостью разобрался Огромное спасибо за этот урок и все остальные!
@user-vs3cm2nw4d
@user-vs3cm2nw4d 3 года назад
Спасибо, наконец я понял как они работают и для чего нужны эти декораторы 👍
@andreyolshansky8078
@andreyolshansky8078 Год назад
Самое Доходчивое объяснение материала!
@ChikivaraTV
@ChikivaraTV 4 года назад
Бог программирования, спасибо большое, за доступное и наглядное объяснение!
@spider_godess_adept3313
@spider_godess_adept3313 2 года назад
Большое спасибо, очень приятное и подробное объяснение!
@JeDesi
@JeDesi Год назад
Олег, спасибо огромное за такое разжевывание темы. Ты такие моменты затрагиваешь, которые непонятны интуитивно при изучении, да и к тому, их и сформулировать как вопрос сложно. А ты это объясняешь всё...Респект тебе!
@user-uu8jv2ki3h
@user-uu8jv2ki3h Год назад
Очень внятное и доступное объяснение роли декораторов! Жаль, что Вас на степике нет.
@diamagnetic26
@diamagnetic26 2 года назад
Спасибо вам, самый доступный подход к объяснению!
@He1LBoy34
@He1LBoy34 5 лет назад
Очень круто! Спасибо за объяснение!
@vladyslavpaliasnyi1611
@vladyslavpaliasnyi1611 2 года назад
Отличное и доступное обьяснение. Спасибо!
@lefort6943
@lefort6943 2 года назад
Спасибо Олег, вы лучший преподаватель!
@rubickaghanimus4423
@rubickaghanimus4423 4 года назад
Спасибо ваша лекция сильно помогла!
@ivanbag9741
@ivanbag9741 4 года назад
Отличное изложение! Пример то что надо! Смотрел другие видосы про декораторы, читал. На таких кривых примерах объяснялось всё, что не понятно было для чего городить огород. Спасибо!
@vladimirkulakov8667
@vladimirkulakov8667 2 года назад
Шикарная демонстрация замыканий, огромный респект! и Вот я уже на декораторах)
@loktionov
@loktionov 3 года назад
Олег, спасибо, очень понятно объясняешь
@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]
@user-wz5tk2se3n
@user-wz5tk2se3n 3 года назад
или l = [x*2 for x in range(1, 500)]
@triceratropical2865
@triceratropical2865 2 года назад
Здесь я думаю специально "поддали нагрузки", проводя сравнения остатка с нулем.
@victorstepanov3588
@victorstepanov3588 Год назад
Да, этот алгоритм покруче
@imgnl
@imgnl 6 лет назад
Олег, спасибо большое!
@volsof
@volsof Год назад
Очень понятно рассказано, спасибо!
@timtimbot
@timtimbot 5 лет назад
Один из самых полезных каналов
@user-sl4jq9op9l
@user-sl4jq9op9l 3 года назад
Круто объясняете, всё понятно, спасибо!
@y18kotov
@y18kotov 4 года назад
Олег, большое спасибо.
@DavidHill1980
@DavidHill1980 6 лет назад
Oleg восхищаюсь упорством… не прекращай создавать контент
@7razum
@7razum 5 лет назад
Спасибо. Доступно изложено
@maxmorgan9025
@maxmorgan9025 6 лет назад
Спасибо, да да и про замыкания. Пожалуйста.
@warmybo
@warmybo 6 лет назад
Класс! Все просто и понятно!
@ZeichenBosen
@ZeichenBosen 2 года назад
Спасибо, очень доходчиво объясняете
@ispan4eG
@ispan4eG 3 года назад
я в шоке! Наконец-то понял как это работает! Такого простого объяснения я не ожидал. Спасибо!
@uniqqquniqqq2053
@uniqqquniqqq2053 2 года назад
Отличное объяснение, спасибо вам
@user-lq4id8qr8q
@user-lq4id8qr8q 3 года назад
Олег, спасибо! Теперь то все понятно наконец =) Я уже не первый десяток видео про декораторы смотрю, твое будет последним, ибо после него вопросов не остается совсем)
@user-yw7hd8qr1v
@user-yw7hd8qr1v 4 месяца назад
лучшее объяснение про декораторы!
@denisden6222
@denisden6222 3 года назад
Поскольку l1 = результат ВЫПОЛНЕНИЯ функции timeit, а результат выполнения этой функции = return wrapper, то в итоге, l1 = wrapper (то, что вернуло выполнение функции timeit). Спасибо за это пояснение! Никак не мог понять почему так происходит)
@go5190
@go5190 6 лет назад
Спасибо!
@darksouls706
@darksouls706 6 лет назад
очень хорошие касты по python! Подписался )
@lanalinali
@lanalinali 5 лет назад
интересно, понятно) спасибо!
@vovaysach
@vovaysach 3 года назад
Спасибо большое! очень понятно, а то читал в паре мест, смотрел в курсах - там плохо было рассказано.
@nestenerusnester4798
@nestenerusnester4798 6 лет назад
Расскажи про yeild и магические методы
@MrCher666
@MrCher666 4 года назад
ПФ ... Мужик.... Здоровья тебе, хахаха, ибо я столько стучался, что бы понять как работает декоратор, а ты нормально объяснил всё на адекватных примерах. Спасибо огромное
@nordmilk
@nordmilk 3 года назад
я 5 лет пытался понять что это, а автор этого урока расказал за 7 минут
@GoodBoy-hs7pv
@GoodBoy-hs7pv 4 года назад
Блестяще!!!
@user-jt1ds4vb3r
@user-jt1ds4vb3r 2 года назад
Три дня разбираюсь с декораторами. И только из этого видео понял, что это за зверь!)
@melancholic_017
@melancholic_017 Год назад
Мужик, я бы тебе дал) Заплатил бабки за курс, а учат меня такие интузиасты как ты, спасибо!
@edgull_tlt
@edgull_tlt 3 года назад
Спасибище!
@eugenkirya9476
@eugenkirya9476 2 года назад
Капец!!! перелопатил кучу документации - не понял... тут за 15 мин всё ясно!!! СПС
@adginr
@adginr 5 лет назад
Благодрю.
@leomysky
@leomysky 3 года назад
Круто Круто И ещё раз Круто! Спасибо!
@Dtankhaev
@Dtankhaev Год назад
Лучший!
@tier61wro
@tier61wro 5 месяцев назад
Спасибо большое за контент, единствеенное, если заглянуть глубоко получается, что декораторы это частные случаи замыканий. Возможно стоило сначала рассказать о замыканиях а потом уже о декораторах.
@user-mi7yt7mw4r
@user-mi7yt7mw4r 5 лет назад
Спасибо!!!
@user-hu7tu5qe7b
@user-hu7tu5qe7b 3 года назад
Спасибо
@EvgenySigvald
@EvgenySigvald 6 лет назад
Занятный момент - код внутри декоратора на самом верхнем уровне будет выполнен всегда, при инициализации декорируемой функции (на чём собственно и основана работа маршрутизатора упомянутого Flask), это видно при запуске скрипта - вызовов функций нет, но вывод идёт. Было бы здорово акцентировать на этом внимание и дополнить примерами использования. Может даже на отдельный выпуск хватить ) PS: Я ещё не всё посмотрел, может это в другом видео есть, но вдруг )
@zaemiel
@zaemiel 6 лет назад
нет, я на этом не акцентировался. Наверное, действительно следовало об этом сказать...
@suhanoves
@suhanoves 3 года назад
Для тех кто столкнулся с подобным вопросом, но самостоятельно не может найти на него ответа, вот отличная статья на хабре habr.com/ru/post/141501/
@user-rg2ci6wy7y
@user-rg2ci6wy7y 5 лет назад
Спасибо. Я понял что такое декораторы
@user-yy5sl1sm1y
@user-yy5sl1sm1y 5 лет назад
Ну это крутоо )
@igorb.4917
@igorb.4917 6 лет назад
Спасибо, отличный автор, приятно слушать и смотреть.
@zaemiel
@zaemiel 6 лет назад
Спасибо
@inko567
@inko567 5 лет назад
шикарная архитектура Python ,,,, ох я счастлив ! Истина со мной
@paulboss5524
@paulboss5524 6 лет назад
крутой чувак)
@Dennis_Ritchie
@Dennis_Ritchie Год назад
офигенный пример с datetime
@deceivedxchild
@deceivedxchild 4 года назад
Из двух других видеоуроков с горем пополам понял, что такое декораторы, но совершенно не понял их предназначение - муть какая-то. Уже думал, что на этой теме мои способности иссякают, но погуглил и попал сюда - тут всё понятно сразу же, тк что это не у меня способности иссякают, а спсобность объяснять - у тех преподов, которых смотрел. Большое спасибо!
@user-li5ls7gu5z
@user-li5ls7gu5z 6 лет назад
_Олег, привет. У тебя замечательные уроки получаются. Очень толково и грамотно объясняешь. А не планируешь ли ты записать полноценный обучающий курс по Python? Прям чтоб с азов (для начинающих) до вершин мастерства?_
@yanagaeify
@yanagaeify 6 лет назад
Можешь воспользоваться этими курсами: этот для начала stepik.org/course/67 этот сложнее stepik.org/course/512 этот самый сложный stepik.org/course/1280
@Alex-yx2ye
@Alex-yx2ye 6 лет назад
Поддерживаю на все 100%
@user-li5ls7gu5z
@user-li5ls7gu5z 6 лет назад
_спасибо за ссылки, Марк, но этих ребят я не знаю, а вот Олег себя отлично поставил. Потому и обращаюсь к нему_
@JohnChrom
@JohnChrom 6 лет назад
Роман Белов присоединяюсь. С удовольствием записался бы.
@callpack96
@callpack96 4 года назад
Роман Белов было бы круто
@user-nh7eb5uf3z
@user-nh7eb5uf3z 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 давай
@chalex2k
@chalex2k 2 года назад
0:20 пример, в котором следует использовать декораторы 7:21 о функциях как объектах 7:58 декоратор функции, не принимающей аргументы 10:46 добавление аргументов в функцию 12:07 как работает синтаксический сахар @decorator 15:49 добавление аргументов декоратора
@GLOBALeVGENIUS
@GLOBALeVGENIUS 4 года назад
годнота
@vitalyvlasenko5495
@vitalyvlasenko5495 2 года назад
12:00 генератор отработал медленнее) думаю, дело в том, что генератор сразу резервирует место, а при вызове метода append() иногда приходится переносить весь список в новую область памяти.
@rugineer
@rugineer 6 лет назад
Прикольно, что на 11:56 время создания списка через for меньше, чем через генератор. Понятно, что это погрешность, но всё же)
@devZu9
@devZu9 5 лет назад
Я кстати это тоже заметил. Вообще как только он обернул всё в декоратор, то почему-то скорость у for значительно возросла. А когда он сменил 10**4 на 10000, так вот for ещё и вышел в лидеры по скорости.
@asaki1k
@asaki1k 3 года назад
@@devZu9 предполагаю, потому что в цикле 10**4 считалось снова и снова каждую итерацию, а в той конструкции результат запоминался
@Gleb_Pastushenko
@Gleb_Pastushenko 3 года назад
Здравствуйте. На 15:40, если я всё правильно понял, то это синтаксический сахар не для l1 = timeit(one), а для замены one = timeit(one)? На 17:20 получается, что код между timeit и outer будет выполнен уже на этапе декорирования, т.е. ещё до вызова декорируемой функции? Если да, то не очень понятно для чего это нужно.
@user-sl4jq9op9l
@user-sl4jq9op9l Год назад
лайк, Олег не сказал только, что вместо 'args' и 'kwargs' мы можем написать любые другие идентификаторы (имена), хоть 'parampam1' и 'parampam2', - это НЕ специмена (или какие-то операторы языка), а просто договорились так называть эти параметры в подобных случаях - а вообще это просто параметры, которые можно назвать как угодно (главное - поставить зведочки '*' и '**"). трудно понять зачем объяснять, тем для кого это ну очень очевидно (тебе), но новичков это реально путает и вымораживает: что такое 'args', что такое 'kwargs' (это особенно страшное слово), и почему они везде. а это просто название от балды двух параметров, и сокращение от фраз 'arguments' и 'keyword arguments'. они прям реально на этом месте запинаются, как минимум, и долго (до полугода) постоянно возвращаются к этому, как максимум. это резко углубит объяснение, в то же время не усложняя его. возможно, ты заострял внимание на этом моменте в каком-то другом ролике
@khnykaq8823
@khnykaq8823 Год назад
офигеть
@esthetik_life
@esthetik_life 5 лет назад
Спасибо за Ваши видео, как всегда всё на высоте ! Не совсем понял, зачем в функцию wrapper вы принимаете *args и **kwargs, ведь если эта функция получить кортеж или словарь, то будет ошибка, или я чего не понимаю ?
@zaemiel
@zaemiel 5 лет назад
*args и **kwargs - это не просто список или словарь - это позиционные и именованные аргументы. Экспериментируйте и посмотрите, какие аргументы и куда идут на вход...
@alinaveter7371
@alinaveter7371 2 года назад
Просто обязана отписаться, что разжевано действительно восхитительно, спасибо от всей души!
@79fz270704
@79fz270704 6 лет назад
Олег, Вы говорите не про генераторы, а про list comprehension. Можно создавать генераторы подобным способом, но скобки должны быть круглые, например: g = (x for x in range(10**4) if x % 2 == 0)
@zaemiel
@zaemiel 6 лет назад
Честно говоря, даже не представляю чем вы слушаете.... Здесь я говорю только о генераторах списков. 0:18 - впервые упоминаю генератор списка 0:36 - уже второе упоминание 0:57 - третье при постановке задачи И минуты не прошло, как генераторы списков были упомянуты мной трижды. Этот скринкаст находится в контексте предыдущего, который и был целиком посвящен генераторам списков - list comprehension. Для удобства Марк сократил в своем коменте упоминание - до генераторов, потому что мы находились в определенном контексте, который нужно учитывать. Об этом я тоже сказал. А так да - то, что вы написали - это генератор.
@79fz270704
@79fz270704 6 лет назад
Видимо я просто привык к другой терминологии, мне помниться, это называли списковое включение, в вики есть одноименная статья. В любом случае, Вы делаете хорошие уроки, продолжайте в том же духе!
@zaemiel
@zaemiel 6 лет назад
Спасибо. Прошу прощения за резкость.
@MAIVSHOW
@MAIVSHOW 4 года назад
13:18, можно просто: l1 = one print(l1(10))
@johnwoods978
@johnwoods978 4 года назад
красава. монстр.
@undefined422
@undefined422 2 года назад
@@johnwoods978 print(one(10)) ПРОСТО МАШИНА
@user-ed1hy3by5p
@user-ed1hy3by5p 3 года назад
Отличный урок. Единственное что я так и не понял - почему в конце урока, когда добавлена функция outer, аргумент name выводится в консоль два раза (команда print в 7-й строке) ? Когда происходит второе обращение к этой функции print ?
@user-er7qx1lo5g
@user-er7qx1lo5g Год назад
удалось разобраться?
@herrschwarzfuchs
@herrschwarzfuchs 5 лет назад
на 9.42 м. запустил у себя. Получил TypeError: 'list' object is not callable. Когда привел к виду l1 = one l2 = two (без скобок) заработало без ошибок. Вопрос, что это было?
@user-fk2cq4ff4k
@user-fk2cq4ff4k 4 года назад
добрый день. Почему нельзя в предпоследний return(который перед return wrapper стоит в функции timeit) вставить func(*args,**kwargs) сразу? Так работает быстрее
@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. Спасибо.
@salamattulkibayev8456
@salamattulkibayev8456 5 лет назад
Take a like from the beginning))
@abrosovd
@abrosovd Год назад
11:54 при запуске видно, что второй вызов происходит дольше чем первый :)
@ezez2586
@ezez2586 3 года назад
а почему при указании func в скобках вызывалась именно функция one, а не two?
@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 Возможно при сильно нагруженных проектах это пройдет, но на легких точно разницы нет. Возможно я чего-то не понимаю. Как много всего возможного в этом сообщении =)
@alexanderpadalka5708
@alexanderpadalka5708 3 года назад
@Makumazaan
@Makumazaan 3 года назад
Это не касается данного урока, но в этих конкретных примерах оптимальнее было бы убрать control flow statement используя третий аргумент "step" в функции range. even = [num for num in range(0, 10**4, 2)]
@xurry4988
@xurry4988 Год назад
я пишу в пайчарме и самое смешное это то, что время разное выдает, иногда генератор быстрее, иногда медленее
@user-ic3su6qh6k
@user-ic3su6qh6k 3 года назад
подскажите в чем разницы между import datetime и from datetime import datetime. я думал что импортируя весь модуль я сразу буду иметь доступ ко всем его плюшкам но тут это не прокатило просто импортирую датувремя я не получил метод now а вот импортируя методом фром***импорт*** я получил метод now. странно но у меня оба метода выводятся с одинаковой скорости то есть счетчики показываю стандартно сотую секунды.
@SmileGobo
@SmileGobo 5 лет назад
А почему после использования декораторов время выполнения с циклом уменьшилось? Кеширование?
@timursafin5214
@timursafin5214 6 лет назад
Для чего нужна функция wrapper?
@zaemiel
@zaemiel 6 лет назад
Затем, что у вас не получится обернуть функцию в какой-то код без этой служебной функции. Поэкспериментируйте. Это важно (я имею в виду играться и экспериментировать)
@AlexandrSpirit
@AlexandrSpirit 4 года назад
на 12й секунде, функция two неожиданно стала дольше работать! Тогда как ранее была быстрее чем one. Из-за чего?
Далее
когда повзрослела // EVA mash
00:40
Просмотров 1,8 млн
Python Decorators in 15 Minutes
15:14
Просмотров 427 тыс.