Замыкания в 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
🫵 Теория без практики - ничто, поэтому 👇 🐍 stepik.org/course/63085/promo 👉 специально для тебя создал бесплатный топовый курс по Python 👉 В нем тебя ждет: 📗 более 400 практических заданий на программирование 📗 более 250 тестовых заданий на проверку материала 📗 десятки часов видеоматерилов по теории 📗 видеоразборы решения заданий 📗 текстовые материалы по урокам, примеры кода 📗 доступ к закрытому чату с дружественной обстановкой 📗 сертификат в случае успешного прохождения курса
Самые лучшие уроки, которые я встречал на KZread. Максимально понятно.
четко в нужное время! Как раз разобрал замыкание в js =) Благодарю ❤️
Как всегда на высоком уровне качества. Спасибо
Понятное объяснение!) Спасибо большое за урок!
Артём, благодарю! Потрясающе интересная тема! 🔥 Градус сложности повышается 🙂
Я просмотрел видео очень тщательно, повторяя все действия и теперь кажется я начинаю понимать как это можно применять, но до сих пор не особо понимаю почему это работает))) Простите меня за флуд) это всё эмоции)
Очень понятные объяснения. Очень легко слушать и воспринимать.
Построение речи самое важное в подаче материала. Невероятно благодарен !
Спасибо огромное ,долго не мог понять как это работает , помог разобраться )))
Спасибо, то что нужно, через class такое делал.
Отлично. Первая часть замыканий усвоена. Перехожу ко второй. И спасибо.
Кажется я наконец-то поняла. Посмотрю на всякий случай ещё пару раз :)
Братан уважуха! Спасибо большое. Удачи тебе. (Узбекистан, г.Ташкент)
Со второго раза дошло! Спасибо!
Спасибо) Очень доступно)
Класс! Прояснил некоторые моменты
Спасибо за такие видео
Спасибо большое за ваши уроки, вы очень хорошо объясняете, у вас самый понятный канал по программированию.
Спасибо за видео!
Спасибо огромное!!!
Очень доходчиво
Спасибо!
СПАСИБО!
как же ты понятно объясняешь)
Добрый день! Спасибо за уроки! А будут ли подобные видео по алгоритмам ?
Спасибо.
У тебя лучшие видео по Python. Ни одна книга так не объясняет как ты , респект . Разбери еще пожалуйста тему функций высшего порядка, как спонсор прошу)))
@egoroffchannel
4 жыл бұрын
спасибо. Что именно ты хочешь услышать в этом видео?
@zingmao
4 жыл бұрын
@@egoroffchannel как они вообще работают, где применяются и пару примеров их использования)
@user-mj4ti5nt1k
Жыл бұрын
@@zingmao помню, что такое видео было на канале Selfedu, если ещё нужно.
@user-yo7qq4od2j
Жыл бұрын
@@user-mj4ti5nt1k Да, курс "Добрый, добрый Python" на stepik =)
Хороший туториал
Артем, очередное огромное спасибо за интересный урок. Если можно, подскажи, в каком видео можно посмотреть про экземпляры классов?
@egoroffchannel
3 жыл бұрын
в плейлисте про ООП
@user-rw2ig6nb5l
3 жыл бұрын
@@egoroffchannel Спасибо
Урок изложен очень тяжело, предыдущие уроки изложены очень хорошо
@badsurvival7309
Жыл бұрын
Дело не в уроке, а в теме, Пайтон схватываю на лету, но вот замыкание и декораторы пытаюсь понять уже по 3 видеоуроку
Спасибо, отличная тема!!!
@user-si7pp2zo1w
4 жыл бұрын
cool!!!
Как вы рисуете на экране? Тоже так хочу:D
спасибо за видео, очень доступно все описано. Но у меня возник вопрос : почему нужно использовать nonlocal для count. Выяснила в процессе, что это зависит от типа данных, для неизменяемых нужно использовать nonlocal, чтобы их изменить.
@egoroffchannel
3 жыл бұрын
nonlocal нужна для указания области видимости из которой будешь брать переменную
@olitakic
2 жыл бұрын
@@egoroffchannel но почему в предыдущих примерах нам не требовалось указывать nonlocal? спасибо за крутые видео!
@agility3554
2 жыл бұрын
@@olitakic в предыдущих примерах мы получали значение, а не меняли его.
Ни разу не приходилось пользоваться замыканиями в Python ( я даже о них не знал, пока не столкнулся с javascript :))). Но теперь понятно, напоминает декораторы.
@egoroffchannel
4 жыл бұрын
да, декораторы так раз будут следующие)
в примере с счетчиком, я правильно понял, что о сохранении значения говорит тот факт, что при запуске, например count()() счетчик будет всегда на значении "1"?
Интуитивно чувствую, что замыкания довольно полезны, но что-то не очевидно, где это можно применить Оо Особенно, при наличии классов.
@osvab000
3 жыл бұрын
Посмотри Молчанова по этому поводу - он подробно рассказывает аналогию замыкания с ООП.
Впервые я не понял среди видео Артема. 1. Почему мы в конце функции вызываем внутреннюю? Разве внутренняя без этого не будет исполняться автоматически? 2. Почему мы ее без параметров в скобках вызываем? Возможно я и сам разберусь, но если кто-то ответит, то буду признателен!
@user-lc7jj4np8h
3 жыл бұрын
внутренняя функция не будет выполняться автоматически без явного ее вызова. через return func(не func()) функция не вызывается, а передается из "функции-обертки" в "переменную", после чего переменная "становится"(имя ссылается на) этой функцией. func() - вызов функции. () - "оператор" вызова, сообщает интерпретатору, что функция "вызывается", т.е. выполняются, описанные в ее теле инструкции. a = func() - в а "помещается" то, что возвращает(return) функция, либо None, когда функция не возвращает значений. func - "имя" функции, так же, как и "имя"(ссылка) на любой другой объект. а = func равносильно a = b(где b = 5, например), т.е. a начинает ссылаться на то же на что и func, в данном случае на функцию func и так же может быть вызвана через "оператор" (). т.е. а() равносильно func().
а может ли использование замыканий привести к жору памяти? тут ведь после использования функции сборщик мусора ничего не собирает...
иными словами можно создать параметрическую ф-ию F(a, x) , где а - это параметр, который можно задать заранее. и так же забавно что F может изменять изначально заданный параметр.
одно не совсем понятно... мы знаем, что после выполнения любой функции её локальные переменные уничтожаются, тогда возникает резонный вопрос: каким образом и где именно сохраняются переменные при использовании замыканий? в данном случае сохраняется переменная самой вложенной функции, или же сохраняется переменная материнской функции, на которую ссылается дочерняя (вложенная) функция? вот этот момент не совсем понятен
@user-wz8ln2om6i
3 жыл бұрын
Так ка в Python всё есть объект, то функция есть экземпляр класса и, следовательно, у него есть атрибуты. Если более конкретно, то в примере с def counter():... значение переменной count хранится внутри специального cell объекта и доступна как c.___closure__[0].cell_contents, где c - ссылка на внешнюю функцию counter, __closure___ - специальный атрибут, который есть экземпляр кортежа из которого по индексу 0 выбираем ячейку с атрибутом count и по атрибуту cell_content доступно его текущее значение.
У меня такой вопрос - возврат функции без скобок такие как "return inner_func" возможно использовать помимо этого случая, в более простых задачах?
@Das.Kleine.Krokodil
2 жыл бұрын
так ты передаешь саму функцию можно не только делать return inner_func, но и в любых местах использовать фунцию как переменную например: print(inner_func) func2(inner_func) итд
Артём, а ты только Питон хорошо знаешь? Или и Java тоже знаешь? А то книги по Java, как философские труды. Сложны для понимания и осмысления.
да, еще ,можно уточнить - почему используется консоль в видео? Похоже после этого видео у меня больше вопросов чем ответов
@user-fc6nr8cr4p
3 жыл бұрын
уже сам понял, что исключительно для удобства)
Шатал чисто
Что такое классы?
Добрый день, вопрос, почему при дублировании материала с видео, return не выполняет функцию без скобок, а со скобками выполняет, но в конце пишет None. def main_func(): name='Иван' def inner_func(): print("Имя", name) return inner_func a=main_func() print(a)
@arturam9768
3 жыл бұрын
Не надо писать в принте, когда вызываешь функцию а(), оно само отработает и напишет принт(так как в самой функции inner есть принт), а когда заворачиваешь это в принт то оно срабатывает, а потом еще и возвращает то, что возвращает его return, но так как у иннер функа нету return-a, оно возвращает 0. А если пишешь без скобок в принте то он показывает что это за объеет и где он хранится
@arturam9768
3 жыл бұрын
Тоесть если мы создадим переменную b, где b=a, то всякий раз при вызове b будет выполнятся то же самое, что и выполнял a, а если напишем b=a() то оно получит значение его return-a
@user-bs3ur6wo2z
3 жыл бұрын
@@arturam9768 Благодарю)
@inconstancy
3 жыл бұрын
@@arturam9768 если отсутствует return, то по умолчанию будет return None, а не return 0, не вводите людей в заблуждение
А для каких целей такие телодвижения понадобятся? И, как я понял, по сути, нет никакой разницы между классами и замыканием, разве что в читабельности. Верно?
@m_i_r_k
11 ай бұрын
В декораторах, например, очень важная вещь
Ох как туго постигается, пробую повторять - то работает то не работает, ошибок не вижу, ну вот допустим сейчас- def main_func(): def inner_func(): print('hello my friend') return inner_func b=main_func() b - выводит не так же как на видео из-за разницы операционных систем?
@RomanZverev-yc5qc
3 жыл бұрын
всё же норм
Еще один вопрос - на сколько я понял функция nonlocal как бы ставит переменную на ступень выше, а функция global делает переменную глобальной сразу, так?
@egoroffchannel
3 жыл бұрын
nonlocal не ставит, а говорит не искать переменную здесь, а ищи ее выше
@user-fc6nr8cr4p
3 жыл бұрын
@@egoroffchannel не так выразился, а global говорит - ищи переменную в глобальном ?
@atomicfuture1865
3 жыл бұрын
@@user-fc6nr8cr4p Да
Я вот что не понимаю, почему main_func работает только тогда, когда ее помещают в переменную (в примере r = main_func('Misha')) и потом вызывают эту переменную как функцию r()? При чем работает эта функция только через консоль! Почему так?
@user-de3op9hs4p
6 ай бұрын
Потому что она что-возвращает. Надо куда-то возврат записать. Работает она не только через консоль. Просто автор почему-то ее через консоль вызывает, хотя можно было бы и через саму IDE.
А почему main_func() нужно обязательно записывать в переменную, а потом эту переменную вызывать?Почему нельзя сразу main_func()?
@oleg6791
3 жыл бұрын
В переменную вы записываете уже вызванную функцию, то есть результат ее выполнения. А результат выполнения этой функции - это функция которая была вложена. То есть в переменную записывается вывернутая внешняя функция
Первое видео из этой серии, в котором я ничего не понял с первого просмотра. Попробую пересмотреть...
@m_i_r_k
11 ай бұрын
Здравствуйте. Ну как успехи, спустя два месяца?)
@johnyelasto
10 ай бұрын
@@m_i_r_kон уже ceo гугла
Привет у меня есть вопрос по пайтону. Например я ввожу в программу число с плавающей точкой и мне надо отбросить n числа перед запятым как это можно сделать например 123456,7890 я хочу отбросить число 6 перед запятым чтобы осталось только 5 чисел , после запятой знаю как сделать но перед не знаю ? Может тупой вопрос но я учус . Вот само задание : Написать инструкцию вывода значений переменных a, b и c (типа float) с пятью цифрами в целой части и тремя - в дробной. Значения должны быть выведены в виде: a = значение b = значение c = значение.
@MrAbad202
4 жыл бұрын
round(12.2424263, 2) >>> 12.24
@user-cx7kq7mf7o
4 жыл бұрын
a = str(число) for i in rang(len(a)): if a[i] == ',' : a.pop(i-1) break a = float(a)
@vovergg
4 жыл бұрын
@@user-cx7kq7mf7o Так работать не будет, у строк нет метода pop.
@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
4 жыл бұрын
Гугли, всё есть в тырнете.
Люди добрый, я понял как они работают, но я пока не пойму где это можно применить, кто-нибудь может объяснить пожалуйста?
@m_i_r_k
11 ай бұрын
В декораторах, например
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
4 жыл бұрын
Обрати внимание, что ты возвращаешь! у тебя возвращается не сама функция, а вызов функции inner_func. Теперь посмотри какой результат вызова inner_func, точнее что она тебе вернет. Подсказка None
На нон локале мозг поломался ...
Corey Schafer , egoroff_channel 1love)))
А почему в плейлисте этот урок аж тут,но в товем курсе он 43
@codelearner2986
Жыл бұрын
Ава имба
Сказал, что это очень похоже на то, как ведут себя экземпляры класса. Но я что то не видел до этого тут обучалок про классы. Они есть?
@maestro1387
2 жыл бұрын
Да, есть. В плейлисте про ООП
Замыкание - это когда вложенная функция может пользоваться переменными, которые объявлены снаружи этой функции.
я когда увидел функцию внутри функции, то удивился. А зачем нужно определять функцию внутри? можно же определить вторую функцию, а потом просто вызвать из main функцию внутреннюю и сохранить в переменную. По крайней мере так в языке си работает.
@tenelokis
Жыл бұрын
Это подводка к декораторам
_Просмотры упали под ноль, почему?_ Из за видео для спонсоров?.. Подписчиков то _28 к_ . . .
@Mralex22801
4 жыл бұрын
Так всегда с обучением. Сначала интересно людям, потом надоедает.
@egoroffchannel
4 жыл бұрын
просмотры никуда не подали, они держатся на том же уровне. Это образовательный канал, а не развлекательный
нихуя не понял, но очень интересно
Сложное
Абсолютно ничего не понятно
Ни хера не понятно ! Зачем сохранять функцию в переменную и писать ее без скобок , если и так все работает без этого треша и все значения показываются во всех областях без проблем.
@johnyelasto
10 ай бұрын
На этом примере да, а если у тебя будет модуль с классами, то переменная будет не в зоне видимости, такие вот дела, маслята 🫣
Артём, открой свободный доступ к Части 2 - Замыкания в Python. Не будь жмотом. Тебе мало, что ты с рекламы имеешь?! Я тут зубрю твои видео-уроки “... на жопе волосы рву ...” чтоб освоить новое интересное ремесло, а ты ещё подляны делаешь?! Думаешь легко понять, когда у тебя язык заплетается от усталости? Открой свободный доступ к Части 2. Замыкания в Python - не издевайся над приличными людьми! … Не пропадай, дружище! ... … Мы тебя ценим! …
Бред
Опять сухие примеры замыканий.