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

🔥🔥🔥 Инди-курс по Python 🔥🔥🔥
stepik.org/course/63085/promo
👉👉👉 Свой вопрос по курсу можешь задать в чате
t.me/+SlnNhAO7caBlNDM6
👉👉👉 Также подписывайся на мой телеграмм-канал
t.me/python_egoroff
Подробнее об урок
egoroffartem.pythonanywhere.co...
Функции (def). Определение и вызов функции
• 35 Функции (def) в Pyt...
Область видимости: локальная, глобальная и встроенная.
• 38 Область видимости. ...
stepik.org/course/63085/promo
Курс на степике
В данном уроке поговорим о том, что такое замыкания (closures)
Для создания замыкания нам понадобиться создать вложенную функцию, которая будет использовать переменную, объявленную за ее пределами
Все видео этого курса можете найти на сайте
egoroffartem.pythonanywhere.co...
или в Вк
videos-177962775?secti...
Если кому нужна помощь, предлагаю индивидуальные занятия. Подробнее пишите в личку в вк
artem_egoroff
python.study
В данном группе можете найти информацию о новых видео и задать вопросы

Пікірлер: 118

  • @egoroffchannel
    @egoroffchannel2 ай бұрын

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

  • @MultiPalaz
    @MultiPalaz4 жыл бұрын

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

  • @egorkomarov4719
    @egorkomarov47194 жыл бұрын

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

  • @IGORVBORODIN
    @IGORVBORODIN4 жыл бұрын

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

  • @user-fs9gp6oz8x
    @user-fs9gp6oz8x3 жыл бұрын

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

  • @Dmitrii-Zhinzhilov
    @Dmitrii-Zhinzhilov Жыл бұрын

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

  • @user-fc6nr8cr4p
    @user-fc6nr8cr4p3 жыл бұрын

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

  • @user-yb3gf6js5s
    @user-yb3gf6js5s3 жыл бұрын

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

  • @ivanstereotekkofficial5353
    @ivanstereotekkofficial53532 жыл бұрын

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

  • @live_cs2
    @live_cs2 Жыл бұрын

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

  • @Mralex22801
    @Mralex228014 жыл бұрын

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

  • @bistronousogust
    @bistronousogust2 жыл бұрын

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

  • @user-hi1bw5gb3r
    @user-hi1bw5gb3r2 жыл бұрын

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

  • @HRVRDTech
    @HRVRDTech4 жыл бұрын

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

  • @Evgeniy270885
    @Evgeniy270885 Жыл бұрын

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

  • @dmitrystelmakhov848
    @dmitrystelmakhov8482 жыл бұрын

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

  • @Larriva666
    @Larriva666 Жыл бұрын

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

  • @ShoutingVase
    @ShoutingVase Жыл бұрын

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

  • @super2125
    @super21254 жыл бұрын

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

  • @alibekjusupov9577
    @alibekjusupov95773 жыл бұрын

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

  • @archibaldivanovich4103
    @archibaldivanovich41033 жыл бұрын

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

  • @akkh6971
    @akkh69713 жыл бұрын

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

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil2 жыл бұрын

    Спасибо!

  • @denisk730
    @denisk7302 жыл бұрын

    СПАСИБО!

  • @user-rs7yy6ze8r
    @user-rs7yy6ze8r2 жыл бұрын

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

  • @evgenyrudakov6963
    @evgenyrudakov69634 жыл бұрын

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

  • @sainco3036
    @sainco30364 жыл бұрын

    Спасибо.

  • @zingmao
    @zingmao4 жыл бұрын

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

  • @egoroffchannel

    @egoroffchannel

    4 жыл бұрын

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

  • @zingmao

    @zingmao

    4 жыл бұрын

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

  • @user-mj4ti5nt1k

    @user-mj4ti5nt1k

    Жыл бұрын

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

  • @user-yo7qq4od2j

    @user-yo7qq4od2j

    Жыл бұрын

    @@user-mj4ti5nt1k Да, курс "Добрый, добрый Python" на stepik =)

  • @qwertymegaforce9088
    @qwertymegaforce9088 Жыл бұрын

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

  • @user-rw2ig6nb5l
    @user-rw2ig6nb5l3 жыл бұрын

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

  • @egoroffchannel

    @egoroffchannel

    3 жыл бұрын

    в плейлисте про ООП

  • @user-rw2ig6nb5l

    @user-rw2ig6nb5l

    3 жыл бұрын

    @@egoroffchannel Спасибо

  • @andreyorlov6952
    @andreyorlov69522 жыл бұрын

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

  • @badsurvival7309

    @badsurvival7309

    Жыл бұрын

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

  • @akmiable
    @akmiable4 жыл бұрын

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

  • @user-si7pp2zo1w

    @user-si7pp2zo1w

    4 жыл бұрын

    cool!!!

  • @utyara3
    @utyara32 жыл бұрын

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

  • @panda_na_hiltsi
    @panda_na_hiltsi3 жыл бұрын

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

  • @egoroffchannel

    @egoroffchannel

    3 жыл бұрын

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

  • @olitakic

    @olitakic

    2 жыл бұрын

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

  • @agility3554

    @agility3554

    2 жыл бұрын

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

  • @vovergg
    @vovergg4 жыл бұрын

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

  • @egoroffchannel

    @egoroffchannel

    4 жыл бұрын

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

  • @user-ml4xx7ii8x
    @user-ml4xx7ii8x2 жыл бұрын

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

  • @Roiser101
    @Roiser1014 жыл бұрын

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

  • @osvab000

    @osvab000

    3 жыл бұрын

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

  • @alekseikozhevnikov8957
    @alekseikozhevnikov89574 жыл бұрын

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

  • @user-lc7jj4np8h

    @user-lc7jj4np8h

    3 жыл бұрын

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

  • @crypto_oil
    @crypto_oil Жыл бұрын

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

  • @evariste6943
    @evariste69432 жыл бұрын

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

  • @inconstancy
    @inconstancy3 жыл бұрын

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

  • @user-wz8ln2om6i

    @user-wz8ln2om6i

    3 жыл бұрын

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

  • @user-fc6nr8cr4p
    @user-fc6nr8cr4p3 жыл бұрын

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

  • @Das.Kleine.Krokodil

    @Das.Kleine.Krokodil

    2 жыл бұрын

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

  • @gaunter_o_d1mm
    @gaunter_o_d1mm3 жыл бұрын

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

  • @user-fc6nr8cr4p
    @user-fc6nr8cr4p3 жыл бұрын

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

  • @user-fc6nr8cr4p

    @user-fc6nr8cr4p

    3 жыл бұрын

    уже сам понял, что исключительно для удобства)

  • @VeihShizoo
    @VeihShizooАй бұрын

    Шатал чисто

  • @ECHO-bw4ce
    @ECHO-bw4ce5 ай бұрын

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

  • @user-bs3ur6wo2z
    @user-bs3ur6wo2z3 жыл бұрын

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

  • @arturam9768

    @arturam9768

    3 жыл бұрын

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

  • @arturam9768

    @arturam9768

    3 жыл бұрын

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

  • @user-bs3ur6wo2z

    @user-bs3ur6wo2z

    3 жыл бұрын

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

  • @inconstancy

    @inconstancy

    3 жыл бұрын

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

  • @MstrDuos
    @MstrDuos Жыл бұрын

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

  • @m_i_r_k

    @m_i_r_k

    11 ай бұрын

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

  • @user-fc6nr8cr4p
    @user-fc6nr8cr4p3 жыл бұрын

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

  • @RomanZverev-yc5qc

    @RomanZverev-yc5qc

    3 жыл бұрын

    всё же норм

  • @user-fc6nr8cr4p
    @user-fc6nr8cr4p3 жыл бұрын

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

  • @egoroffchannel

    @egoroffchannel

    3 жыл бұрын

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

  • @user-fc6nr8cr4p

    @user-fc6nr8cr4p

    3 жыл бұрын

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

  • @atomicfuture1865

    @atomicfuture1865

    3 жыл бұрын

    @@user-fc6nr8cr4p Да

  • @user-br3ik4nz8j
    @user-br3ik4nz8j Жыл бұрын

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

  • @user-de3op9hs4p

    @user-de3op9hs4p

    6 ай бұрын

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

  • @dauren10
    @dauren103 жыл бұрын

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

  • @oleg6791

    @oleg6791

    3 жыл бұрын

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

  • @user-tz4sd5ky8w
    @user-tz4sd5ky8w Жыл бұрын

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

  • @m_i_r_k

    @m_i_r_k

    11 ай бұрын

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

  • @johnyelasto

    @johnyelasto

    10 ай бұрын

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

  • @fron5455
    @fron54554 жыл бұрын

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

  • @MrAbad202

    @MrAbad202

    4 жыл бұрын

    round(12.2424263, 2) >>> 12.24

  • @user-cx7kq7mf7o

    @user-cx7kq7mf7o

    4 жыл бұрын

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

  • @vovergg

    @vovergg

    4 жыл бұрын

    @@user-cx7kq7mf7o Так работать не будет, у строк нет метода 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 жыл бұрын

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

  • @user-sl2rh3wi3d
    @user-sl2rh3wi3d Жыл бұрын

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

  • @m_i_r_k

    @m_i_r_k

    11 ай бұрын

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

  • @sir6681
    @sir66814 жыл бұрын

    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 жыл бұрын

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

  • @PianoSurRia
    @PianoSurRia3 жыл бұрын

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

  • @andriiew325
    @andriiew3254 жыл бұрын

    Corey Schafer , egoroff_channel 1love)))

  • @vsevolod9987
    @vsevolod9987 Жыл бұрын

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

  • @codelearner2986

    @codelearner2986

    Жыл бұрын

    Ава имба

  • @Abith72
    @Abith722 жыл бұрын

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

  • @maestro1387

    @maestro1387

    2 жыл бұрын

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

  • @user-xd3gu6vr2n
    @user-xd3gu6vr2n3 жыл бұрын

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

  • @QScientist
    @QScientist2 жыл бұрын

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

  • @tenelokis

    @tenelokis

    Жыл бұрын

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

  • @kirillusenko
    @kirillusenko4 жыл бұрын

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

  • @Mralex22801

    @Mralex22801

    4 жыл бұрын

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

  • @egoroffchannel

    @egoroffchannel

    4 жыл бұрын

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

  • @gopherDooshit1
    @gopherDooshit1 Жыл бұрын

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

  • @VeihShizoo
    @VeihShizooАй бұрын

    Сложное

  • @andrewananenko797
    @andrewananenko7973 жыл бұрын

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

  • @Rusia-16
    @Rusia-16 Жыл бұрын

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

  • @johnyelasto

    @johnyelasto

    10 ай бұрын

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

  • @Mr717273747
    @Mr7172737473 жыл бұрын

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

  • @Webian
    @Webian2 жыл бұрын

    Бред

  • @YACommunity
    @YACommunity Жыл бұрын

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

Келесі