Замыкания в Python. Closure Python

Поделиться
HTML-код
  • Опубликовано: 1 дек 2024

Комментарии • 121

  • @egoroffchannel
    @egoroffchannel  6 месяцев назад +1

    🫵 Теория без практики - ничто, поэтому 👇
    🐍 stepik.org/course/63085/promo
    👉 специально для тебя создал бесплатный топовый курс по Python
    👉 В нем тебя ждет:
    📗 более 400 практических заданий на программирование
    📗 более 250 тестовых заданий на проверку материала
    📗 десятки часов видеоматерилов по теории
    📗 видеоразборы решения заданий
    📗 текстовые материалы по урокам, примеры кода
    📗 доступ к закрытому чату с дружественной обстановкой
    📗 сертификат в случае успешного прохождения курса

  • @MultiPalaz
    @MultiPalaz 4 года назад +11

    Самые лучшие уроки, которые я встречал на RUclips. Максимально понятно.

  • @egorkomarov4719
    @egorkomarov4719 4 года назад +23

    четко в нужное время! Как раз разобрал замыкание в js =) Благодарю ❤️

  • @live_cs2
    @live_cs2 Год назад +1

    Спасибо огромное ,долго не мог понять как это работает , помог разобраться )))

  • @IGORVBORODIN
    @IGORVBORODIN 4 года назад +6

    Как всегда на высоком уровне качества. Спасибо

  • @НиколайМануилов-и1д
    @НиколайМануилов-и1д 3 года назад +8

    Я просмотрел видео очень тщательно, повторяя все действия и теперь кажется я начинаю понимать как это можно применять, но до сих пор не особо понимаю почему это работает))) Простите меня за флуд) это всё эмоции)

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov 2 года назад +2

    Артём, благодарю! Потрясающе интересная тема! 🔥 Градус сложности повышается 🙂

  • @Юлия-ч9с6й
    @Юлия-ч9с6й 2 года назад +1

    Кажется я наконец-то поняла. Посмотрю на всякий случай ещё пару раз :)

  • @Квантоваяопределенность

    Очень понятные объяснения. Очень легко слушать и воспринимать.

  • @ivanstereotekkofficial5353
    @ivanstereotekkofficial5353 3 года назад +5

    Построение речи самое важное в подаче материала. Невероятно благодарен !

  • @super2125
    @super2125 4 года назад +3

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

  • @ВалерияМалышева-ь1в
    @ВалерияМалышева-ь1в 4 года назад +2

    Понятное объяснение!) Спасибо большое за урок!

  • @Evgeniy270885
    @Evgeniy270885 Год назад +1

    Со второго раза дошло! Спасибо!

  • @Larriva666
    @Larriva666 Год назад +1

    Класс! Прояснил некоторые моменты

  • @HRVRDTech
    @HRVRDTech 4 года назад +2

    Братан уважуха! Спасибо большое. Удачи тебе. (Узбекистан, г.Ташкент)

  • @bistronousogust
    @bistronousogust 2 года назад

    Отлично. Первая часть замыканий усвоена. Перехожу ко второй. И спасибо.

  • @zingmao
    @zingmao 4 года назад +4

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

    • @egoroffchannel
      @egoroffchannel  4 года назад +1

      спасибо. Что именно ты хочешь услышать в этом видео?

    • @zingmao
      @zingmao 4 года назад +2

      @@egoroffchannel как они вообще работают, где применяются и пару примеров их использования)

    • @БлезПаскаль-э6р
      @БлезПаскаль-э6р Год назад

      @@zingmao помню, что такое видео было на канале Selfedu, если ещё нужно.

    • @ДмитрийКрашенинников-г7ш
      @ДмитрийКрашенинников-г7ш Год назад

      @@БлезПаскаль-э6р Да, курс "Добрый, добрый Python" на stepik =)

  • @Mralex22801
    @Mralex22801 4 года назад +1

    Спасибо, то что нужно, через class такое делал.

  • @archibaldivanovich4103
    @archibaldivanovich4103 4 года назад +2

    Спасибо огромное!!!

  • @akkh6971
    @akkh6971 4 года назад +2

    Очень доходчиво

  • @alibekjusupov9577
    @alibekjusupov9577 3 года назад +1

    Спасибо за видео!

  • @АлександрДонцов-з9ц

    как же ты понятно объясняешь)

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil 3 года назад +2

    Спасибо!

  • @blindboy007
    @blindboy007 12 дней назад

    Для закрепления материала достаточно написать функцию для вычисления N-го числа Фибоначчи используя замыкания.

  • @dmitrystelmakhov848
    @dmitrystelmakhov848 3 года назад

    Спасибо) Очень доступно)

  • @qwertymegaforce9088
    @qwertymegaforce9088 2 года назад

    Хороший туториал

  • @alekseikozhevnikov8957
    @alekseikozhevnikov8957 4 года назад +3

    Впервые я не понял среди видео Артема.
    1. Почему мы в конце функции вызываем внутреннюю? Разве внутренняя без этого не будет исполняться автоматически?
    2. Почему мы ее без параметров в скобках вызываем?
    Возможно я и сам разберусь, но если кто-то ответит, то буду признателен!

    • @ВладиславЕгоров-п4ю
      @ВладиславЕгоров-п4ю 4 года назад +7

      внутренняя функция не будет выполняться автоматически без явного ее вызова.
      через return func(не func()) функция не вызывается, а передается из "функции-обертки" в "переменную", после чего переменная "становится"(имя ссылается на) этой функцией.
      func() - вызов функции. () - "оператор" вызова, сообщает интерпретатору, что функция "вызывается", т.е. выполняются, описанные в ее теле инструкции.
      a = func() - в а "помещается" то, что возвращает(return) функция, либо None, когда функция не возвращает значений.
      func - "имя" функции, так же, как и "имя"(ссылка) на любой другой объект.
      а = func равносильно a = b(где b = 5, например), т.е. a начинает ссылаться на то же на что и func, в данном случае на функцию func и так же может быть вызвана через "оператор" ().
      т.е. а() равносильно func().

  • @utyara3
    @utyara3 3 года назад +4

    Как вы рисуете на экране? Тоже так хочу:D

  • @Roiser101
    @Roiser101 4 года назад +7

    Интуитивно чувствую, что замыкания довольно полезны, но что-то не очевидно, где это можно применить Оо
    Особенно, при наличии классов.

    • @osvab000
      @osvab000 4 года назад +1

      Посмотри Молчанова по этому поводу - он подробно рассказывает аналогию замыкания с ООП.

  • @andreyorlov6952
    @andreyorlov6952 2 года назад +4

    Урок изложен очень тяжело, предыдущие уроки изложены очень хорошо

    • @badsurvival7309
      @badsurvival7309 Год назад +2

      Дело не в уроке, а в теме, Пайтон схватываю на лету, но вот замыкание и декораторы пытаюсь понять уже по 3 видеоуроку

  • @panda_na_hiltsi
    @panda_na_hiltsi 4 года назад +5

    спасибо за видео, очень доступно все описано. Но у меня возник вопрос : почему нужно использовать nonlocal для count. Выяснила в процессе, что это зависит от типа данных, для неизменяемых нужно использовать nonlocal, чтобы их изменить.

    • @egoroffchannel
      @egoroffchannel  4 года назад +1

      nonlocal нужна для указания области видимости из которой будешь брать переменную

    • @olitakic
      @olitakic 2 года назад

      @@egoroffchannel но почему в предыдущих примерах нам не требовалось указывать nonlocal? спасибо за крутые видео!

    • @agility3554
      @agility3554 2 года назад +3

      @@olitakic в предыдущих примерах мы получали значение, а не меняли его.

  • @vovergg
    @vovergg 4 года назад +1

    Ни разу не приходилось пользоваться замыканиями в Python ( я даже о них не знал, пока не столкнулся с javascript :))). Но теперь понятно, напоминает декораторы.

    • @egoroffchannel
      @egoroffchannel  4 года назад +1

      да, декораторы так раз будут следующие)

  • @АртурХасиев-ж8с
    @АртурХасиев-ж8с 2 года назад +1

    в примере с счетчиком, я правильно понял, что о сохранении значения говорит тот факт, что при запуске, например count()() счетчик будет всегда на значении "1"?

  • @inconstancy
    @inconstancy 4 года назад +2

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

    • @АлександрХолодов-л3н
      @АлександрХолодов-л3н 3 года назад +1

      Так ка в Python всё есть объект, то функция есть экземпляр класса и, следовательно, у него есть атрибуты. Если более конкретно, то в примере с def counter():... значение переменной count хранится внутри специального cell объекта и доступна как c.___closure__[0].cell_contents, где c - ссылка на внешнюю функцию counter, __closure___ - специальный атрибут, который есть экземпляр кортежа из которого по индексу 0 выбираем ячейку с атрибутом count и по атрибуту cell_content доступно его текущее значение.

  • @evariste6943
    @evariste6943 2 года назад

    иными словами можно создать параметрическую ф-ию F(a, x) , где а - это параметр, который можно задать заранее. и так же забавно что F может изменять изначально заданный параметр.

  • @evgenyrudakov6963
    @evgenyrudakov6963 4 года назад +3

    Добрый день! Спасибо за уроки!
    А будут ли подобные видео по алгоритмам ?

  • @sainco3036
    @sainco3036 4 года назад +1

    Спасибо.

  • @crypto_oil
    @crypto_oil Год назад +1

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

  • @ЕвгенийПоловинский-в6у

    Артем, очередное огромное спасибо за интересный урок.
    Если можно, подскажи, в каком видео можно посмотреть про экземпляры классов?

  • @МарияДуванова-э1т
    @МарияДуванова-э1т 3 года назад +3

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

  • @akmiable
    @akmiable 4 года назад

    Спасибо, отличная тема!!!

  • @НиколайМануилов-и1д
    @НиколайМануилов-и1д 3 года назад +1

    да, еще ,можно уточнить - почему используется консоль в видео? Похоже после этого видео у меня больше вопросов чем ответов

  • @VenfogeL
    @VenfogeL 3 месяца назад

    А как вывести на экран эти функции вне консоли? Почему я когда нажимаю run, то ничего не происходит и пустая консоль?

  • @MstrDuos
    @MstrDuos 2 года назад +1

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

    • @m_i_r_k
      @m_i_r_k Год назад

      В декораторах, например, очень важная вещь

  • @gaunter_o_d1mm
    @gaunter_o_d1mm 3 года назад +1

    Артём, а ты только Питон хорошо знаешь? Или и Java тоже знаешь? А то книги по Java, как философские труды. Сложны для понимания и осмысления.

  • @ИльяУваров-у2в
    @ИльяУваров-у2в Год назад +1

    Я вот что не понимаю, почему main_func работает только тогда, когда ее помещают в переменную (в примере r = main_func('Misha')) и потом вызывают эту переменную как функцию r()? При чем работает эта функция только через консоль! Почему так?

    • @ДенисМедведев-о7д
      @ДенисМедведев-о7д 10 месяцев назад

      Потому что она что-возвращает. Надо куда-то возврат записать. Работает она не только через консоль. Просто автор почему-то ее через консоль вызывает, хотя можно было бы и через саму IDE.

  • @Himera1983
    @Himera1983 Месяц назад

    что за In в консоли. Как это. все понимание рушиться . Откуда ты взял эту консоль такую . Это IDE pycharm ?

  • @dauren10
    @dauren10 3 года назад +1

    А почему main_func() нужно обязательно записывать в переменную, а потом эту переменную вызывать?Почему нельзя сразу main_func()?

    • @oleg6791
      @oleg6791 3 года назад

      В переменную вы записываете уже вызванную функцию, то есть результат ее выполнения. А результат выполнения этой функции - это функция которая была вложена. То есть в переменную записывается вывернутая внешняя функция

  • @НиколайМануилов-и1д

    У меня такой вопрос - возврат функции без скобок такие как "return inner_func" возможно использовать помимо этого случая, в более простых задачах?

    • @Das.Kleine.Krokodil
      @Das.Kleine.Krokodil 3 года назад

      так ты передаешь саму функцию
      можно не только делать return inner_func, но и в любых местах использовать фунцию как переменную
      например:
      print(inner_func)
      func2(inner_func)
      итд

  • @ECHO-bw4ce
    @ECHO-bw4ce 9 месяцев назад

    Что такое классы?

  • @sir6681
    @sir6681 4 года назад

    def main_func():
    def inner_func():
    print('inner func now')
    return inner_func()
    Если мы присваиваем переменной 'a' значение main_func(), то почему при вызове 'a' не запускается inner_func():
    print('inner func now')??
    a = main_func()
    type(a) дает результат
    Но ведь вы положили в переменную нашу функцию. Почему получается такой класс?

    • @egoroffchannel
      @egoroffchannel  4 года назад +1

      Обрати внимание, что ты возвращаешь! у тебя возвращается не сама функция, а вызов функции inner_func. Теперь посмотри какой результат вызова inner_func, точнее что она тебе вернет. Подсказка None

  • @user-tz4sd5ky8w
    @user-tz4sd5ky8w Год назад

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

    • @m_i_r_k
      @m_i_r_k Год назад

      Здравствуйте. Ну как успехи, спустя два месяца?)

    • @johnyelasto
      @johnyelasto Год назад +1

      ​@@m_i_r_kон уже ceo гугла

  • @PianoSurRia
    @PianoSurRia 3 года назад +2

    На нон локале мозг поломался ...

  • @ДенисСтаханов-ж5р
    @ДенисСтаханов-ж5р Год назад +1

    Люди добрый, я понял как они работают, но я пока не пойму где это можно применить, кто-нибудь может объяснить пожалуйста?

    • @m_i_r_k
      @m_i_r_k Год назад

      В декораторах, например

  • @VeihShizoo
    @VeihShizoo 5 месяцев назад

    Шатал чисто

  • @НиколайМануилов-и1д

    Ох как туго постигается, пробую повторять - то работает то не работает, ошибок не вижу, ну вот допустим сейчас-
    def main_func():
    def inner_func():
    print('hello my friend')
    return inner_func
    b=main_func()
    b
    - выводит не так же как на видео из-за разницы операционных систем?

  • @НиколайМануилов-и1д

    Еще один вопрос - на сколько я понял функция nonlocal как бы ставит переменную на ступень выше, а функция global делает переменную глобальной сразу, так?

    • @egoroffchannel
      @egoroffchannel  3 года назад +1

      nonlocal не ставит, а говорит не искать переменную здесь, а ищи ее выше

    • @НиколайМануилов-и1д
      @НиколайМануилов-и1д 3 года назад +1

      @@egoroffchannel не так выразился, а global говорит - ищи переменную в глобальном ?

    • @atomicfuture1865
      @atomicfuture1865 3 года назад +1

      @@НиколайМануилов-и1д Да

  • @АндрейБаскаков-ы5д
    @АндрейБаскаков-ы5д 4 года назад

    Добрый день, вопрос, почему при дублировании материала с видео, return не выполняет функцию без скобок, а со скобками выполняет, но в конце пишет None.
    def main_func():
    name='Иван'
    def inner_func():
    print("Имя", name)
    return inner_func
    a=main_func()
    print(a)

    • @arturam9768
      @arturam9768 4 года назад

      Не надо писать в принте, когда вызываешь функцию а(), оно само отработает и напишет принт(так как в самой функции inner есть принт), а когда заворачиваешь это в принт то оно срабатывает, а потом еще и возвращает то, что возвращает его return, но так как у иннер функа нету return-a, оно возвращает 0. А если пишешь без скобок в принте то он показывает что это за объеет и где он хранится

    • @arturam9768
      @arturam9768 4 года назад

      Тоесть если мы создадим переменную b, где b=a, то всякий раз при вызове b будет выполнятся то же самое, что и выполнял a, а если напишем b=a() то оно получит значение его return-a

    • @АндрейБаскаков-ы5д
      @АндрейБаскаков-ы5д 4 года назад

      @@arturam9768 Благодарю)

    • @inconstancy
      @inconstancy 4 года назад

      @@arturam9768 если отсутствует return, то по умолчанию будет return None, а не return 0, не вводите людей в заблуждение

  • @vsevolod9987
    @vsevolod9987 Год назад

    А почему в плейлисте этот урок аж тут,но в товем курсе он 43

  • @QScientist
    @QScientist 2 года назад

    я когда увидел функцию внутри функции, то удивился. А зачем нужно определять функцию внутри? можно же определить вторую функцию, а потом просто вызвать из main функцию внутреннюю и сохранить в переменную. По крайней мере так в языке си работает.

    • @tenelokis
      @tenelokis 2 года назад +1

      Это подводка к декораторам

  • @fron5455
    @fron5455 4 года назад

    Привет у меня есть вопрос по пайтону. Например я ввожу в программу число с плавающей точкой и мне надо отбросить n числа перед запятым как это можно сделать например 123456,7890 я хочу отбросить число 6 перед запятым чтобы осталось только 5 чисел , после запятой знаю как сделать но перед не знаю ? Может тупой вопрос но я учус .
    Вот само задание :
    Написать инструкцию вывода значений переменных a, b и c
    (типа float) с пятью цифрами в целой части и тремя - в дробной.
    Значения должны быть выведены в виде: a = значение b = значение c = значение.

    • @MrAbad202
      @MrAbad202 4 года назад

      round(12.2424263, 2)
      >>> 12.24

    • @СергійГорбачов-т5с
      @СергійГорбачов-т5с 4 года назад

      a = str(число)
      for i in rang(len(a)):
      if a[i] == ',' :
      a.pop(i-1)
      break
      a = float(a)

    • @vovergg
      @vovergg 4 года назад

      @@СергійГорбачов-т5с Так работать не будет, у строк нет метода pop.

    • @vovergg
      @vovergg 4 года назад

      С ходу на ум приходит такое решение:
      number = 123456.789
      integer = str(int(number)) # Вычленяем целую часть числа, приводим её к строке
      integer = integer[:5] # Делаем срез из целой части числа от нулевого до пятого
      integer = float(integer) # Приводим строку с целой частью к типу float
      fraction = round(number % 1, 3) # Вычленяем дробную часть и указываем кол-во знаков после запятой
      result = integer + fraction # Складываем целую и дробную части
      (обе части имеют тип float)
      print(result) # Выводим результат в консоль

    • @aleksandrfareast
      @aleksandrfareast 4 года назад

      Гугли, всё есть в тырнете.

  • @MartinQumin
    @MartinQumin 3 года назад

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

    • @maestro1387
      @maestro1387 3 года назад

      Да, есть. В плейлисте про ООП

  • @andriiew325
    @andriiew325 4 года назад

    Corey Schafer
    , egoroff_channel 1love)))

  • @kirillusenko
    @kirillusenko 4 года назад

    _Просмотры упали под ноль, почему?_ Из за видео для спонсоров?.. Подписчиков то _28 к_ . . .

    • @Mralex22801
      @Mralex22801 4 года назад +1

      Так всегда с обучением. Сначала интересно людям, потом надоедает.

    • @egoroffchannel
      @egoroffchannel  4 года назад +7

      просмотры никуда не подали, они держатся на том же уровне.
      Это образовательный канал, а не развлекательный

  • @gopherDooshit1
    @gopherDooshit1 2 года назад

    нихуя не понял, но очень интересно

  • @VeihShizoo
    @VeihShizoo 5 месяцев назад

    Сложное

  • @andrewananenko797
    @andrewananenko797 4 года назад +2

    Абсолютно ничего не понятно

  • @Mr717273747
    @Mr717273747 3 года назад +1

    Артём, открой свободный доступ к Части 2 - Замыкания в Python.
    Не будь жмотом.
    Тебе мало, что ты с рекламы имеешь?!
    Я тут зубрю твои видео-уроки “... на жопе волосы рву ...” чтоб освоить новое интересное ремесло, а ты ещё подляны делаешь?!
    Думаешь легко понять, когда у тебя язык заплетается от усталости?
    Открой свободный доступ к Части 2. Замыкания в Python - не издевайся над приличными людьми!
    … Не пропадай, дружище! ...
    … Мы тебя ценим! …

  • @Rusia-16
    @Rusia-16 Год назад

    Ни хера не понятно ! Зачем сохранять функцию в переменную и писать ее без скобок , если и так все работает без этого треша и все значения показываются во всех областях без проблем.

    • @johnyelasto
      @johnyelasto Год назад

      На этом примере да, а если у тебя будет модуль с классами, то переменная будет не в зоне видимости, такие вот дела, маслята 🫣

  • @Webian
    @Webian 2 года назад

    Бред

  • @Im-not-meat
    @Im-not-meat Год назад

    Опять сухие примеры замыканий.

  • @ShoutingVase
    @ShoutingVase Год назад +1

    Спасибо за такие видео

  • @denisk730
    @denisk730 2 года назад +1

    СПАСИБО!