#46. Декораторы с параметрами. Сохранение свойств декорируемых функций | Python для начинающих

แชร์
ฝัง
  • เผยแพร่เมื่อ 27 ธ.ค. 2024

ความคิดเห็น • 132

  • @86Blind
    @86Blind 3 ปีที่แล้ว +41

    Талант к преподаванию. Подача материала на высоте. Сергей, спасибо за уроки !!!! Здоровья !!

    • @hardlabor9412
      @hardlabor9412 ปีที่แล้ว

      База

    • @blindboy007
      @blindboy007 หลายเดือนก่อน

      Вы все знаете что такое производная? А примера по проще нельзя было придумать?

  • @hxxskyy3975
    @hxxskyy3975 10 หลายเดือนก่อน +3

    Большое вам спасибо, благодаря вашим двум видео про декораторы наконец-то понял их устройство работы, великолепное объяснение

  • @ДмитрийЧернов-е9н
    @ДмитрийЧернов-е9н 2 ปีที่แล้ว +9

    Просто вынос мозга

  • @ДмитрийКрашенинников-г7ш
    @ДмитрийКрашенинников-г7ш 9 หลายเดือนก่อน +2

    Прохожу сейчас платные курсы (у вас тоже Сергей) , но конкретно учусь на разработчика ВЕБ приложений. В общем хочу сказать, то, что лучше Вас никто еще не объяснял. Лесть - не круто, но это блин так! Это факт, а факт - штука упрямая. Даже я, 41-летний мужчина, начал что-то вспоминать про производные =)

  • @ErkinBori-k1n
    @ErkinBori-k1n 4 หลายเดือนก่อน +2

    Лучшее обьяснения темы декораторов

  • @andredru4278
    @andredru4278 10 หลายเดือนก่อน +1

    Спасибо. Понял, что надо еще раз просмотреть тему с замыканиями.

  • @user-mz1rv4og9n
    @user-mz1rv4og9n 7 หลายเดือนก่อน +2

    Ох, как же я вам благодарен. Раньше я никак не мог понять как вызывается функция второго уровня вложенности. Оказалось сам интерпретатор так запрограммирован.

  • @Aleksandr-s7i3n
    @Aleksandr-s7i3n 11 หลายเดือนก่อน +5

    Для начинающих объяснять темы на примере синусов и косинусов прям вообще круть👍Вообще,нужно задействовать побольше какой-нибудь высшей математики,тригонометрии и квантовой физики в примерах чтоб легче усваивать было программирование новичкам, ну не тем что физмат окончили, другим новичкам..
    А вообще автору спасибо, деньги я за просмотр не платил, а значит и возникать нефиг, в книгах которые покупал просто тоже частенько примеры замороченные, а потом найдешь где-нибудь попроще объяснение и такой, ляяя как так можно такую простую тему так усложнить..

  • @SpikeSatevis
    @SpikeSatevis 2 ปีที่แล้ว +20

    Единственный урок который не понял вообще(

  • @donfedor007
    @donfedor007 3 ปีที่แล้ว +5

    Отпуск провожу не зря! Самообразование сила!

  • @Elena-xq3gc
    @Elena-xq3gc ปีที่แล้ว +1

    Спасибо, за доступное объяснение трудных тем, я уже отчаялась все это понять, а тут однокурсники порекомендовали ваши курсы. Надежда на то, что все-таки смогу постичь язык ожила).

  • @CakesFly
    @CakesFly 2 ปีที่แล้ว +5

    Просто великолепное объяснение! Благодарю, Сергей!

  • @igorkulibaba7287
    @igorkulibaba7287 3 ปีที่แล้ว +5

    Сергей Вы очень хорошо объясняете. спасибо Вам!

  • @mr.paradox4370
    @mr.paradox4370 ปีที่แล้ว +1

    Отличный материал, подробно представленный!

  • @awwlik
    @awwlik ปีที่แล้ว +2

    09:10 разве правильно менять приватные переменные?

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว +1

      переменные __name__ - это не приватные, а магические (два последних подчеркивания превращают их в магические)

    • @awwlik
      @awwlik ปีที่แล้ว +1

      @@selfedu_rus а если переменная имеет название __value, то она тогда приватная?

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว

      @@awwlikда

  • @alexandercherkashin3512
    @alexandercherkashin3512 ปีที่แล้ว +1

    автор, Вы просто божественен! Так здорово редко объясняет на русскоязычном ютубе! Сделайте пожалуйста курс по паттернам java, если возможно. С большим удовольствием послушаю также

  • @tbassir9076
    @tbassir9076 ปีที่แล้ว +1

    Как всегда респект! Да, эта тема сложная, придётся повторять ещё раз!

  • @Kappitoshca
    @Kappitoshca 2 ปีที่แล้ว +3

    Ваш урок - решение моей задачи, благодарю Вас.

  • @СарматПересветов
    @СарматПересветов ปีที่แล้ว +1

    огромное спасибо!, очень интрестно и полезно. хотя и довольно сложно по сравнению с начальными уроками)

  • @ksymbescenny8859
    @ksymbescenny8859 2 ปีที่แล้ว +25

    Удивляюсь, тому сколько людей пишет, что им все понятно, круто наверное посмотреть видос и сразу все понять, я 4 раз пересматриваю и пока трудно все связать. Как вы все так быстро разбираетесь?

    • @gpankov
      @gpankov 2 ปีที่แล้ว +3

      с опытом придет...

    • @димасбескор
      @димасбескор ปีที่แล้ว +1

      Бро, я такой же))

    • @VGCor
      @VGCor ปีที่แล้ว

      Я смотрю уже с некоторым опытом разработки пет-проекта, чтобы узнать о пробелах в знаниях и заполнить их. Когда начинал, извращался как мог: гуглил, читал найденные статьи, кодварс, стэковерфлоу - хреновый путь. Лучше сначала пройти весь курс от корки до корки, желательно без пропусков тем, а уже потом делать всё что перечислил. Удачи.

    • @ПавелАнаньев-я2к
      @ПавелАнаньев-я2к ปีที่แล้ว +4

      присоединяюсь, всё это хорошо усвоится, если уже есть какой-то опыт, база в голове. На которую можно опереться. Если знания фрагментарные, могут возникнуть сложности. Ну и, конечно, чтоб разобраться, всегда ромогает самому всё это в IDE попробовать, повертеть, посмотреть какое поведение, что от чего зависит.

    • @alexandr8153
      @alexandr8153 ปีที่แล้ว

      Наверно уже не актуально, в общем: ты сам нарисуй схемы взаимодействия кода(со стрелочками как на видео).
      И напиши код из видео и повозись с ним.

  • @iliyanivanov6606
    @iliyanivanov6606 3 ปีที่แล้ว +5

    Спосибо для хорошие объяснения!!

  • @aleksandr_nokhrin
    @aleksandr_nokhrin ปีที่แล้ว +1

    Даже не знаю, что круче - рекурсия или декоратор декоратора )
    Спасибо за урок!

  • @Neural.Academy
    @Neural.Academy 2 ปีที่แล้ว +3

    Как же ты хорош

  • @ivanlino3747
    @ivanlino3747 3 ปีที่แล้ว +3

    Спасибо за материал! Очень интересно!!!

  • @michailpty6302
    @michailpty6302 ปีที่แล้ว +1

    Очень доступно объясняете

  • @kelavr8961
    @kelavr8961 8 หลายเดือนก่อน +1

    Спасибо за урок!!

  • @vladdiachenko8529
    @vladdiachenko8529 2 ปีที่แล้ว +3

    Сергей хочу просто поблагодарить за ваш труд! Я прошол Ваш курс на степике(отдельный респект курсу) и спустя пол года пересмтриваю многие видео и такой - Вау так тут еще и так можно!))) СПАСИБО!!))

  • @ayqikz
    @ayqikz ปีที่แล้ว +1

    Legend, thanks, you helped me a lot

  • @vladimirkulakov6126
    @vladimirkulakov6126 3 ปีที่แล้ว +4

    Сергей отлично преподаёт! Всем рекомендую его курс и отдельное спасибо!

  • @leshen_show
    @leshen_show 2 ปีที่แล้ว +11

    чисто ради интереса вопрос - для сложной темы обязательно было брать пример с синусом, производной и тд? И так сложно, а еще математика 11 класса подъехала...

    • @playt_pythonlearn
      @playt_pythonlearn 2 ปีที่แล้ว

      соглашусь но как пример пойдет
      хе

    • @romanvishnyakov6835
      @romanvishnyakov6835 ปีที่แล้ว

      Ага... только начинаешь, что-то понимать.... хрямс! На те синусы! какой-то там dx, который можно регулировать)🤣🤣

    • @biglakecom
      @biglakecom ปีที่แล้ว

      камон, вам самим не нужно считать. За вас это сделает калькулятор

  • @Insidepointg
    @Insidepointg ปีที่แล้ว +2

    4:19 скажи пожалуйста, какими кнопками ты так ловко табулировал внутренние функции, давно ищу это , спасибо!

    • @xev1882
      @xev1882 ปีที่แล้ว

      не поверишь - TAB (или shift+TAB влево если)

    • @Insidepointg
      @Insidepointg ปีที่แล้ว

      Увы, не поверю. Такая комбинация клавиш не подходит. Пересмотри внимательно момент. У него курслр на внешней функции, а табнулась вся внутренняя вместо с телом

    • @xev1882
      @xev1882 ปีที่แล้ว +1

      @@Insidepointg да, ты прав. Полезная фича. Я тоже не нашел как так делать

    • @bvkiposs
      @bvkiposs ปีที่แล้ว +1

      не знаю нужно ли это спустя 3 месяца, короче просто выделяешь всё что нужно табулировать и нажимаешь таб, на видео автор просто обрезал этот момент

    • @eugenedukatta9355
      @eugenedukatta9355 ปีที่แล้ว

      @@bvkiposs ага, ТАВ работает, как сдвинуть обратно влево? shift+TAB также вправо сдвигает в IDLE

  • @jamjam3337
    @jamjam3337 ปีที่แล้ว +1

    Спасибо!👏👻

  • @DinLiren
    @DinLiren ปีที่แล้ว +2

    Функция для нахождения синуса вычисляет производную через декаратор

    • @johnmazepa
      @johnmazepa ปีที่แล้ว

      аааааааа, ну теперь-то все понятно.
      жаль только не понятно все, что после слова "нахождения" и перед "через декоратор")))

  • @alexanderivlev8458
    @alexanderivlev8458 ปีที่แล้ว +1

    Очень хотелось бы увидеть урок с разбором декорирования декораторов

  • @vladimirkulakov8667
    @vladimirkulakov8667 3 ปีที่แล้ว +2

    а декораторы оказались не так уж и страшны) главное замыкание функций пройти с Сергеем!

    • @playt_pythonlearn
      @playt_pythonlearn 2 ปีที่แล้ว +1

      это вообще каеф, если внимательно посмотреть то ничего сложного нет, главное логика и внимательность

  • @illiukhin
    @illiukhin 3 ปีที่แล้ว +3

    спасибо

  • @palyura1162
    @palyura1162 3 ปีที่แล้ว +4

    5:38 цитата: Запрограммированое действие. Кто не знаком тот не поймет почему именно так. Об этом столило подродней или дать ссылку или дать четкое название как это действие называеться. Я с таким сталкивался попробую найти название такой ситуации.

  • @oopsimath
    @oopsimath 4 หลายเดือนก่อน +1

    То есть мы превращаем обычную конфету в шоколадку -> добавляем обёртку прослойку, и они все - прозрачные ;-)

  • @СергейЛукин-т3д
    @СергейЛукин-т3д 3 ปีที่แล้ว +3

    Как мне об это не сломать мозг? 😭 Надо работать над собой.

    • @playt_pythonlearn
      @playt_pythonlearn 2 ปีที่แล้ว +2

      внимательно посмотри, мне помогло, и быстро поймешь и скажешь что изи

  • @sergeyf7459
    @sergeyf7459 3 ปีที่แล้ว +2

    Отлично)

  • @skiffsolo9419
    @skiffsolo9419 2 ปีที่แล้ว +2

    Пара вопросов.
    1. Разве не проще использовать стандартный метод декорирования вместо @? То есть def func_decor(func, x): и потом ниже sin_df = func_decor(func, 0.0001). Это же позволит создать несколько вариантов, например для вычисления производной с разной степенью точности и избавит от одного уровня вложенности.
    2. Разве не корректнее добавлять описание, что функция вычисляет производную, именно в декоратор? Ведь именно декоратор добавляет функционал вычисления производной, а декорируемая функция вычисляет sin. Разве такой подход не вносит путаницу при чтении кода? Я вижу код который вычисляет синус, но в описании написано, что это производная.

    • @skiffsolo9419
      @skiffsolo9419 2 ปีที่แล้ว +1

      Вот такие две инструкции задают точное описание wrapper.
      wrapper.__name__ = f'der_{func.__name__}_with_{dx}'
      wrapper.__doc__ = f'Вычисляет производную {func.__name__} при dx = {dx}'
      На практике так не делают?

    • @selfedu_rus
      @selfedu_rus  2 ปีที่แล้ว +2

      Смотря, что вам нужно. Делают и с функцией и с оператором @. Но чаще вижу @, т.к. это хорошо визуально выделяет декоратор, да и записать проще, чем через функцию (на мой взгляд). Если же одну и ту же функцию нужно декорировать разными декораторами, то да, второй подход через функцию-декоратор.

  • @biglakecom
    @biglakecom ปีที่แล้ว +1

    А при декорировании функции, если dx не определить в скобках, то будет выходить ошибка. Как быть? Ведь не всегда нужно, чтобы параметр был определен

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว

      в декораторе dx прописан со значением по умолчанию?

  • @johnmazepa
    @johnmazepa ปีที่แล้ว +2

    пока смотрятся как какие-то дикие костыли для непонятных целей все эти телодвижения:
    [оборачивание в три слоя функций]
    [чтоб передать параметр декоратору]
    [маскировка атрибутов обертки через подключенные модули]
    [чтоб функция не выглядела, будто её обернули в три слоя функций]
    [не забыть указатель @декоратор над функцией]
    [чтоб прикрутить всю вышеизложенную громоздкую конструкцию к конкретной функции]
    но судя по разговором знающих парней, эта тема важная. Поэтому, пока стоит эту дичь тупо вызубрить без особого понимания и ждать, что в дальнейшем процессе обучения или на работе как-то объяснят целесообразность использования декораторов.

    • @triviumfan9411
      @triviumfan9411 หลายเดือนก่อน

      Спустя год оно тебе понадобилось?)

    • @johnmazepa
      @johnmazepa หลายเดือนก่อน

      @triviumfan9411 , не, пока только как упражнение для лучшего понимания 'паттерна декоратор', который тоже пока пригодился только на собесах

  • @VGCor
    @VGCor ปีที่แล้ว +1

    Отдельное спасибо за декоратор wraps! Остался только один вопрос. Если нужно использовать и декорированную функцию и исходную функцию без декорирования, как лучше поступить? Приходит только мысль о присвоении исходной функции дополнительного псевдонима через ещё одну переменную.

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว +1

      В этом случае придется применять декоратор не через оператор @, а напрямую, присваивая результат декорации другой переменной. Тогда исходная функция останется без изменений.

    • @VGCor
      @VGCor ปีที่แล้ว

      @@selfedu_rus так и думал. Спасибо за быстрый ответ!

  • @ibrahimoglu
    @ibrahimoglu 3 ปีที่แล้ว +3

    👍

  • @ivanbonadykov9624
    @ivanbonadykov9624 3 ปีที่แล้ว +3

    Здраствуйте, Сергей, какие темы математики надо знать в олимпиадном программировании?

    • @selfedu_rus
      @selfedu_rus  3 ปีที่แล้ว +3

      Я как то далек от этой темы, не скажу

    • @Taron8117
      @Taron8117 ปีที่แล้ว

      @@selfedu_rus добрый день.пишу здесь чтобы вы увидели мой вопрос. Вопрос такой, мы когда обернули наш декоратор в декоратор где у нас параметр dx, после этого параметр х в wrapper же не нужен уже? И в res в вычислениях. Только dx остаётся . Верно ?

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว +1

      @@Taron8117 Мы вызываем декорируемую функцию:
      df = sin_df(math.pi/3)
      здесь math.pi/3 - это и есть x. Поэтому он нужен.

    • @Taron8117
      @Taron8117 ปีที่แล้ว

      @@selfedu_rus вроде понял. Спасибо.

  • @tester3238-y4x
    @tester3238-y4x 3 ปีที่แล้ว +2

    Если на 11-ой минуте убрать в 19 строке (dx=0.01), то ошибок не будет, но декоратор не срабатывает
    Подскажите, пожалуйста, как по невнимательности не попасть в ловушку?

    • @selfedu_rus
      @selfedu_rus  3 ปีที่แล้ว +1

      Не прописывать формальный параметр, т.е. dx без значения по умолчанию

    • @tester3238-y4x
      @tester3238-y4x 3 ปีที่แล้ว

      @@selfedu_rus Спасибо большое

  • @impellergimpeller5133
    @impellergimpeller5133 3 ปีที่แล้ว +2

    👍👍👍👍👍

  • @СквозьГоризонт-м7ъ
    @СквозьГоризонт-м7ъ 3 หลายเดือนก่อน

    Почему внутри wrapper не пишем nonlocal func и nonlocal dx ?

    • @Bin_1-z3i
      @Bin_1-z3i 2 หลายเดือนก่อน

      Так wrapper не меняет значения func и dx, а всего лишь использует их как локальную ссылку

  • @МихаилКириллов-и6у
    @МихаилКириллов-и6у ปีที่แล้ว +2

    Ребята, которые пишут, что сложно. Не обращайте внимание на сложную формулу производной функции, смотрите только на синтаксис языка и на алгоритм, тогда всё будет очень просто.

    • @johnmazepa
      @johnmazepa ปีที่แล้ว

      тяжело заставить мозг игнорировать и не пытаться разобраться как работает код между объявлением функции и return-ом, но мы стараемся)))

    • @eugenedukatta9355
      @eugenedukatta9355 ปีที่แล้ว

      Так вычисление производной здесь самое простое во всем видосе. Кстати если вычислять производную по формуле (func(x+dx/2) - func(x-dx/2)) / dx точность вычисления возрастает сразу на несколько порядков 8))

  • @Developer_python_
    @Developer_python_ ปีที่แล้ว +1

    Nice))))))

  • @Keshtiman
    @Keshtiman 2 ปีที่แล้ว +7

    Наверное, самый сложный урок из тех, которые были

  • @ЕвгенийБерловский-з3ш
    @ЕвгенийБерловский-з3ш ปีที่แล้ว +1

    Это видео нужно продекорировать лайком

  • @ПавелКонстантинов-в7я
    @ПавелКонстантинов-в7я 2 ปีที่แล้ว +1

    У меня вопрос. Вот вы говорите декораторы не надо вызывать скобками(). Но когда дело доходит до свойств, то приходится декоратор со свойствами именно что вызывать (). Иначе значение по умолчанию не подставляется и возвращается ссылка на функцию. А если мы оставим пустые (), то подставляется значение по умолчанию. Я правильно понимаю? Или что-то не то делаю?

    • @selfedu_rus
      @selfedu_rus  2 ปีที่แล้ว

      не совсем понял, вам это быстро и подробно в телеграм-канале расскажут )

  • @timohahahehehe
    @timohahahehehe 2 ปีที่แล้ว +1

    7:54

  • @johnmazepa
    @johnmazepa ปีที่แล้ว +3

    мне кажется кто-то забыл про слово "для начинающих" в названии своего курса?)))
    не думаю, что "производные от функции" - самый просто и наглядный пример для объяснения работы декораторов, облегчающий понимание темы для любого "начинающего" вайтишника.

    • @triviumfan9411
      @triviumfan9411 หลายเดือนก่อน

      Думаешь он сам эти примеры придумывает? Всё давно "спи**жено"

  • @ПавелКонстантинов-в7я
    @ПавелКонстантинов-в7я 2 ปีที่แล้ว +2

    Я как человек не помнящий уже что такое синусы и который не понимает что за производные функции ... Короче я вообще не понимаю что мы тут хотим получить и что берём. Это очень плохие примеры... Остальное по программированию понятно. Спасибо)
    Как сказал один чел на Степике: программисты сумасшедшие люди, я уже тоже близок к сумасшествию, но не к программированию...

    • @PavelNebo
      @PavelNebo ปีที่แล้ว

      а синусы не причём, это просто абстрактный пример, речь идёт о декораторах, хотя конечно от этого не легче :D

  • @ney107-iz6xl
    @ney107-iz6xl ปีที่แล้ว

    df = sin_df(math.pi/3)
    здесь math.pi/3 - это и есть x
    Sin_df это же и 0,001 и косинус
    Я понял что к косинусу мы применяли
    Pi/3 как аргументы но 0,001 что тут делает мы на него умножаем или что?
    Заранее спасибо

  • @ХалилМаденбай
    @ХалилМаденбай 3 ปีที่แล้ว +4

    сложная тема этот декоратор сразу и не вкатишся

  • @Max-s6x
    @Max-s6x 3 ปีที่แล้ว +2

    Спасибо огромное за то что ты всё это делаешь. Всё ясно и понятно объясняешь. Подскажи вроде следуя логики области видимости переменных должно быть следующее:
    def cache(func):
    cach = {}
    count = 0
    def wrapper(*args, ** kwargs):
    if count == 3:

    Этот код выводит ошибку из виде понятно почему можно починить nonlocal, а вот такое:
    def cache(func):
    local = {
    'cach': {},
    'count': 0
    def wrapper(*args, ** kwargs):
    if local['count'] == 3:

    Ошибку не выдаёт!!! Почему?! В чем разница под капотом?!

    • @selfedu_rus
      @selfedu_rus  3 ปีที่แล้ว +1

      Вы, наверное, внутри функции wrapper меняете count, например, count += 1 Как только идет оператор = он создает переменную в текущей области видимости, если ее еще нет (даже если она есть во внешней области), поэтому nonlocal необходим в 1-м случае. Во втором, вы обращаетесь к словарю, но меняете значение его ключа, то есть, новый словарь, естественно, не создается, а значение связывается с нужным ключом словаря. Поэтому при словаре будет работать и без nonlocal. Как то так )

    • @Max-s6x
      @Max-s6x 3 ปีที่แล้ว +2

      @@selfedu_rus супер я так и думал ! То есть ту очень похожа ситуация на константы объекты в JS которые внутри можно изменять а само имя присвоить чему то другому нет) супер спасибо огромное за канал и быстрый обратный фидбэк!!!) лучший канал в русском сегменте по программированию без преувеличения!!!🤝

  • @palyura1162
    @palyura1162 3 ปีที่แล้ว

    3:39 уже не сможем. А до этого что могли? Покрайней мере не показано в видио что в первом варианте можно было прописать параметр в обвертне дикоратора.

    • @selfedu_rus
      @selfedu_rus  3 ปีที่แล้ว

      Имеете в виду прописать еще один параметр после первого параметра func? Если так, то это не совсем то.

    • @PavelNebo
      @PavelNebo ปีที่แล้ว

      дикоратор это обёртка делающая функцию более дикой ? :D

  • @oleksandrlavrenko2487
    @oleksandrlavrenko2487 9 วันที่ผ่านมา +1

    тут уже мозги стали плавиться

  • @als-creator
    @als-creator 3 ปีที่แล้ว +4

    Сколько вообще видео будет в курсе?

  • @kakandaville
    @kakandaville 2 ปีที่แล้ว

    Класман!

  • @АлексейЕгоров-к9е
    @АлексейЕгоров-к9е ปีที่แล้ว +4

    ну зачем использовать синусы, производные и другое?? можно же просто x + 2 или x * 2. а то эти синусы и т.д. очень усложняют и отвлекают от понятия декораторов. сидишь и думаешь что он несет???? какие производные? синусы? и чего там еще... результат хочется видеть 2 или 5 или 6, а не 0.1234567890912345678798090123234546658678 всё таки слова учат с букваря, а не с войны и мир.

    • @PavelNebo
      @PavelNebo ปีที่แล้ว

      кстати говоря это бы не сделало понятнее саму тему декораторов. потому что функция то может быть любая внутри. Мне больше не понятно как через декоратор декоратора внутрь попадает и функция и параметр, Сергей просто сказал "это происходит автоматически" , и это ничего не объяснило, на него это не похоже.. обычно разжовывает.

  • @IvanSergienko-b6w
    @IvanSergienko-b6w 12 วันที่ผ่านมา +1

    Сложнааа...сложнааа

  • @PavelNebo
    @PavelNebo ปีที่แล้ว +1

    Видимо сам пример не совсем удачный, не понятно зачем всё это нужно.
    Ведь мы можем просто сделать функцию с двумя параметрами (x, dx) и всё внутри посчитать, передав нужные параметры... т.е. здесь декоратор ничего не даёт.

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว

      Но это будет уже другая функция. Смысл в том, что декоратор скрывает в себе некторый полезный функционал, которым мы хотим наделить функцию, поэтому его и прописываем для нее. Декораторы повсеместно используются во Flask, Django, Tensorflow, например.

    • @PavelNebo
      @PavelNebo ปีที่แล้ว

      @@selfedu_rus Да, конечно декораторы полезная вещь. Я только что написал небольшой интернет магазин на Джанго для портфолио :) (спасибо вашим урокам, сейчас пересматриваю, чтобы переосмыслить некоторые вещи) Но, используя фреймворк, ты просто берешь готовый декоратор и всё, не важно как он устроен.
      Я к тому что для обучения нужен пример, когда декоратор необходим, т.е. более реальный, что-ли, пример.

  • @r6_3600
    @r6_3600 ปีที่แล้ว

    жесть

  • @xev1882
    @xev1882 ปีที่แล้ว

    не ясно как интерпретатор понимает, что в func надо передать sin_df

  • @torri11
    @torri11 2 ปีที่แล้ว

    Слишком запутано и заумно...можно по проще? смотрел кучу видео где про декор об.ясняли на много проще и понятней.

  • @DarkRootChannel
    @DarkRootChannel ปีที่แล้ว +1

    Сразу дизлайк за сложный пример с какими-то синусами, про которые я ничего не помню. Спасибо большое, специально надо было усложнить

  • @-wolf-7726
    @-wolf-7726 3 หลายเดือนก่อน

    Сходу скажу, что перемудрили. Производные, синусы... Мы же не математики тут.

  • @triviumfan9411
    @triviumfan9411 หลายเดือนก่อน +1

    Я не верю, что такие "бутерброды" используются на практике. Это какая-то дичь.

  • @Dicerec56
    @Dicerec56 7 หลายเดือนก่อน

    Мда...после такого урока и учить дальше не хочется...нудятина

  • @M2164532
    @M2164532 2 ปีที่แล้ว +2

    Уважаемый, Сергей. Не знаю, что заставило Вас так "экономить" на именах (вероятно, существует какое-то тайное соглашение среди программистов об экономии букв), но то, что произошло на 6:40 видео явно не сделало объяснение проще. Пришлось повозиться с этим моментом, чтобы понять как, но так и не понять зачем... Поэтому позволю себе некоторый комментарий к Вашему коду:
    def sin_df(x): #здесь мы оределяем функцию с именем sin_df
    return math.sin(x)
    f = df_decorator(dx=0.001) # вызываем функцию df_decorator с параметром dx
    # Эта функция возвращает func_decorator (функцию) мы присваиваем имени f ссылку
    # на эту функцию. Соответственно f теперь имя для вызываемой функции.
    print(f.__name__) # используйте эту строчку, чтобы увидеть на что ссылается имя f
    sin_df = f(sin_df) # вызываем func_decorator через имя f и передаем sin_df в
    # качестве требуемого параметра func. Функция возвращает wrapper (функцию) и мы
    # присваиваем ссылку на нее имени (ВНИМАНИЕ!) sin_df. До этого момента sin_df было
    # определено как имя другой функции, которую мы декорируем.
    print(sin_df.__name__) # используйте эту строчку, чтобы увидеть на что ссылается имя sin_df
    df = sin_df(math.pi / 3) # вызываем функцию wrapper по имени sin_df, которой
    # передаем обязательный параметр x. И ссылку на результат присваиваем имени df.
    print(df)

    • @eugenedukatta9355
      @eugenedukatta9355 ปีที่แล้ว

      кто-нибудь это читает чтобы сломать себе глаза и мозг?

  • @ney107-iz6xl
    @ney107-iz6xl ปีที่แล้ว

    Спасибо каждую тему пишу в заметки своим словами пишу описание каждой картинке
    За 3 часа разобрал все идеально
    И всем советую так каждую тему в заметки или в тетрадь
    Спасибо за урок
    Есть один вопрос
    From functool import @Wraps
    Именно так и нужно ли писать @wraps(func) писать именно над той функцией с которой хочешь сделать описание и имя ?

    • @blindboy007
      @blindboy007 หลายเดือนก่อน

      Как дела спустя год?

  • @s0042
    @s0042 ปีที่แล้ว

    мой мозг вскипел! ни фига не запомнил ((( с этими вложениями просто каша в голове (((

  • @ДмитрийЧернов-е9н
    @ДмитрийЧернов-е9н 2 ปีที่แล้ว +7

    Просто вынос мозга

    • @fuck_off_
      @fuck_off_ 2 ปีที่แล้ว +4

      Путь тяжел. А выше Сергей ещё написал что можно к одной функции много декораторов применить(-_-) Норм. Весело)

  • @gayratsaidakhmedov5451
    @gayratsaidakhmedov5451 ปีที่แล้ว +1

    спасибо