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

  Рет қаралды 75,859

egoroff_channel

egoroff_channel

4 жыл бұрын

🔥🔥🔥 Инди-курс по 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
@egoroffchannel 2 ай бұрын
🫵 Теория без практики - ничто, поэтому 👇 🐍 stepik.org/course/63085/promo 👉 специально для тебя создал бесплатный топовый курс по Python 👉 В нем тебя ждет: 📗 более 400 практических заданий на программирование 📗 более 250 тестовых заданий на проверку материала 📗 десятки часов видеоматерилов по теории 📗 видеоразборы решения заданий 📗 текстовые материалы по урокам, примеры кода 📗 доступ к закрытому чату с дружественной обстановкой 📗 сертификат в случае успешного прохождения курса
@egorkomarov4719
@egorkomarov4719 4 жыл бұрын
четко в нужное время! Как раз разобрал замыкание в js =) Благодарю ❤️
@MultiPalaz
@MultiPalaz 4 жыл бұрын
Самые лучшие уроки, которые я встречал на KZfaq. Максимально понятно.
@IGORVBORODIN
@IGORVBORODIN 4 жыл бұрын
Как всегда на высоком уровне качества. Спасибо
@user-fc6nr8cr4p
@user-fc6nr8cr4p 3 жыл бұрын
Я просмотрел видео очень тщательно, повторяя все действия и теперь кажется я начинаю понимать как это можно применять, но до сих пор не особо понимаю почему это работает))) Простите меня за флуд) это всё эмоции)
@user-fs9gp6oz8x
@user-fs9gp6oz8x 3 жыл бұрын
Понятное объяснение!) Спасибо большое за урок!
@Dmitrii-Zhinzhilov
@Dmitrii-Zhinzhilov Жыл бұрын
Артём, благодарю! Потрясающе интересная тема! 🔥 Градус сложности повышается 🙂
@user-yb3gf6js5s
@user-yb3gf6js5s 3 жыл бұрын
Очень понятные объяснения. Очень легко слушать и воспринимать.
@live_cs2
@live_cs2 Жыл бұрын
Спасибо огромное ,долго не мог понять как это работает , помог разобраться )))
@user-hi1bw5gb3r
@user-hi1bw5gb3r 2 жыл бұрын
Кажется я наконец-то поняла. Посмотрю на всякий случай ещё пару раз :)
@Mralex22801
@Mralex22801 4 жыл бұрын
Спасибо, то что нужно, через class такое делал.
@Evgeniy270885
@Evgeniy270885 Жыл бұрын
Со второго раза дошло! Спасибо!
@ivanstereotekkofficial5353
@ivanstereotekkofficial5353 2 жыл бұрын
Построение речи самое важное в подаче материала. Невероятно благодарен !
@bistronousogust
@bistronousogust 2 жыл бұрын
Отлично. Первая часть замыканий усвоена. Перехожу ко второй. И спасибо.
@ShoutingVase
@ShoutingVase Жыл бұрын
Спасибо за такие видео
@HRVRDTech
@HRVRDTech 4 жыл бұрын
Братан уважуха! Спасибо большое. Удачи тебе. (Узбекистан, г.Ташкент)
@Larriva666
@Larriva666 Жыл бұрын
Класс! Прояснил некоторые моменты
@alibekjusupov9577
@alibekjusupov9577 3 жыл бұрын
Спасибо за видео!
@archibaldivanovich4103
@archibaldivanovich4103 3 жыл бұрын
Спасибо огромное!!!
@dmitrystelmakhov848
@dmitrystelmakhov848 2 жыл бұрын
Спасибо) Очень доступно)
@akkh6971
@akkh6971 3 жыл бұрын
Очень доходчиво
@super2125
@super2125 4 жыл бұрын
Спасибо большое за ваши уроки, вы очень хорошо объясняете, у вас самый понятный канал по программированию.
@user-rs7yy6ze8r
@user-rs7yy6ze8r 2 жыл бұрын
как же ты понятно объясняешь)
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 жыл бұрын
Спасибо!
@denisk730
@denisk730 2 жыл бұрын
СПАСИБО!
@zingmao
@zingmao 4 жыл бұрын
У тебя лучшие видео по Python. Ни одна книга так не объясняет как ты , респект . Разбери еще пожалуйста тему функций высшего порядка, как спонсор прошу)))
@egoroffchannel
@egoroffchannel 4 жыл бұрын
спасибо. Что именно ты хочешь услышать в этом видео?
@zingmao
@zingmao 4 жыл бұрын
@@egoroffchannel как они вообще работают, где применяются и пару примеров их использования)
@user-mj4ti5nt1k
@user-mj4ti5nt1k Жыл бұрын
@@zingmao помню, что такое видео было на канале Selfedu, если ещё нужно.
@user-yo7qq4od2j
@user-yo7qq4od2j Жыл бұрын
@@user-mj4ti5nt1k Да, курс "Добрый, добрый Python" на stepik =)
@qwertymegaforce9088
@qwertymegaforce9088 Жыл бұрын
Хороший туториал
@sainco3036
@sainco3036 4 жыл бұрын
Спасибо.
@evgenyrudakov6963
@evgenyrudakov6963 4 жыл бұрын
Добрый день! Спасибо за уроки! А будут ли подобные видео по алгоритмам ?
@andreyorlov6952
@andreyorlov6952 2 жыл бұрын
Урок изложен очень тяжело, предыдущие уроки изложены очень хорошо
@badsurvival7309
@badsurvival7309 Жыл бұрын
Дело не в уроке, а в теме, Пайтон схватываю на лету, но вот замыкание и декораторы пытаюсь понять уже по 3 видеоуроку
@akmiable
@akmiable 4 жыл бұрын
Спасибо, отличная тема!!!
@user-si7pp2zo1w
@user-si7pp2zo1w 4 жыл бұрын
cool!!!
@vovergg
@vovergg 4 жыл бұрын
Ни разу не приходилось пользоваться замыканиями в Python ( я даже о них не знал, пока не столкнулся с javascript :))). Но теперь понятно, напоминает декораторы.
@egoroffchannel
@egoroffchannel 4 жыл бұрын
да, декораторы так раз будут следующие)
@alekseikozhevnikov8957
@alekseikozhevnikov8957 4 жыл бұрын
Впервые я не понял среди видео Артема. 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().
@Roiser101
@Roiser101 4 жыл бұрын
Интуитивно чувствую, что замыкания довольно полезны, но что-то не очевидно, где это можно применить Оо Особенно, при наличии классов.
@osvab000
@osvab000 4 жыл бұрын
Посмотри Молчанова по этому поводу - он подробно рассказывает аналогию замыкания с ООП.
@user-rw2ig6nb5l
@user-rw2ig6nb5l 3 жыл бұрын
Артем, очередное огромное спасибо за интересный урок. Если можно, подскажи, в каком видео можно посмотреть про экземпляры классов?
@egoroffchannel
@egoroffchannel 3 жыл бұрын
в плейлисте про ООП
@user-rw2ig6nb5l
@user-rw2ig6nb5l 3 жыл бұрын
@@egoroffchannel Спасибо
@utyara3
@utyara3 2 жыл бұрын
Как вы рисуете на экране? Тоже так хочу:D
@crypto_oil
@crypto_oil Жыл бұрын
а может ли использование замыканий привести к жору памяти? тут ведь после использования функции сборщик мусора ничего не собирает...
@inconstancy
@inconstancy 3 жыл бұрын
одно не совсем понятно... мы знаем, что после выполнения любой функции её локальные переменные уничтожаются, тогда возникает резонный вопрос: каким образом и где именно сохраняются переменные при использовании замыканий? в данном случае сохраняется переменная самой вложенной функции, или же сохраняется переменная материнской функции, на которую ссылается дочерняя (вложенная) функция? вот этот момент не совсем понятен
@user-wz8ln2om6i
@user-wz8ln2om6i 3 жыл бұрын
Так ка в Python всё есть объект, то функция есть экземпляр класса и, следовательно, у него есть атрибуты. Если более конкретно, то в примере с def counter():... значение переменной count хранится внутри специального cell объекта и доступна как c.___closure__[0].cell_contents, где c - ссылка на внешнюю функцию counter, __closure___ - специальный атрибут, который есть экземпляр кортежа из которого по индексу 0 выбираем ячейку с атрибутом count и по атрибуту cell_content доступно его текущее значение.
@evariste6943
@evariste6943 2 жыл бұрын
иными словами можно создать параметрическую ф-ию F(a, x) , где а - это параметр, который можно задать заранее. и так же забавно что F может изменять изначально заданный параметр.
@user-ml4xx7ii8x
@user-ml4xx7ii8x 2 жыл бұрын
в примере с счетчиком, я правильно понял, что о сохранении значения говорит тот факт, что при запуске, например count()() счетчик будет всегда на значении "1"?
@panda_na_hiltsi
@panda_na_hiltsi 3 жыл бұрын
спасибо за видео, очень доступно все описано. Но у меня возник вопрос : почему нужно использовать nonlocal для count. Выяснила в процессе, что это зависит от типа данных, для неизменяемых нужно использовать nonlocal, чтобы их изменить.
@egoroffchannel
@egoroffchannel 3 жыл бұрын
nonlocal нужна для указания области видимости из которой будешь брать переменную
@olitakic
@olitakic 2 жыл бұрын
@@egoroffchannel но почему в предыдущих примерах нам не требовалось указывать nonlocal? спасибо за крутые видео!
@agility3554
@agility3554 2 жыл бұрын
@@olitakic в предыдущих примерах мы получали значение, а не меняли его.
@PianoSurRia
@PianoSurRia 3 жыл бұрын
На нон локале мозг поломался ...
@user-tz4sd5ky8w
@user-tz4sd5ky8w Жыл бұрын
Первое видео из этой серии, в котором я ничего не понял с первого просмотра. Попробую пересмотреть...
@m_i_r_k
@m_i_r_k 11 ай бұрын
Здравствуйте. Ну как успехи, спустя два месяца?)
@johnyelasto
@johnyelasto 10 ай бұрын
​@@m_i_r_kон уже ceo гугла
@gaunter_o_d1mm
@gaunter_o_d1mm 3 жыл бұрын
Артём, а ты только Питон хорошо знаешь? Или и Java тоже знаешь? А то книги по Java, как философские труды. Сложны для понимания и осмысления.
@user-fc6nr8cr4p
@user-fc6nr8cr4p 3 жыл бұрын
У меня такой вопрос - возврат функции без скобок такие как "return inner_func" возможно использовать помимо этого случая, в более простых задачах?
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 жыл бұрын
так ты передаешь саму функцию можно не только делать return inner_func, но и в любых местах использовать фунцию как переменную например: print(inner_func) func2(inner_func) итд
@user-fc6nr8cr4p
@user-fc6nr8cr4p 3 жыл бұрын
да, еще ,можно уточнить - почему используется консоль в видео? Похоже после этого видео у меня больше вопросов чем ответов
@user-fc6nr8cr4p
@user-fc6nr8cr4p 3 жыл бұрын
уже сам понял, что исключительно для удобства)
@MstrDuos
@MstrDuos Жыл бұрын
А для каких целей такие телодвижения понадобятся? И, как я понял, по сути, нет никакой разницы между классами и замыканием, разве что в читабельности. Верно?
@m_i_r_k
@m_i_r_k 11 ай бұрын
В декораторах, например, очень важная вещь
@user-br3ik4nz8j
@user-br3ik4nz8j Жыл бұрын
Я вот что не понимаю, почему main_func работает только тогда, когда ее помещают в переменную (в примере r = main_func('Misha')) и потом вызывают эту переменную как функцию r()? При чем работает эта функция только через консоль! Почему так?
@user-de3op9hs4p
@user-de3op9hs4p 6 ай бұрын
Потому что она что-возвращает. Надо куда-то возврат записать. Работает она не только через консоль. Просто автор почему-то ее через консоль вызывает, хотя можно было бы и через саму IDE.
@VeihShizoo
@VeihShizoo Ай бұрын
Шатал чисто
@user-bs3ur6wo2z
@user-bs3ur6wo2z 3 жыл бұрын
Добрый день, вопрос, почему при дублировании материала с видео, 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, не вводите людей в заблуждение
@dauren10
@dauren10 3 жыл бұрын
А почему main_func() нужно обязательно записывать в переменную, а потом эту переменную вызывать?Почему нельзя сразу main_func()?
@oleg6791
@oleg6791 3 жыл бұрын
В переменную вы записываете уже вызванную функцию, то есть результат ее выполнения. А результат выполнения этой функции - это функция которая была вложена. То есть в переменную записывается вывернутая внешняя функция
@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 жыл бұрын
Обрати внимание, что ты возвращаешь! у тебя возвращается не сама функция, а вызов функции inner_func. Теперь посмотри какой результат вызова inner_func, точнее что она тебе вернет. Подсказка None
@user-xd3gu6vr2n
@user-xd3gu6vr2n 3 жыл бұрын
Замыкание - это когда вложенная функция может пользоваться переменными, которые объявлены снаружи этой функции.
@user-fc6nr8cr4p
@user-fc6nr8cr4p 3 жыл бұрын
Ох как туго постигается, пробую повторять - то работает то не работает, ошибок не вижу, ну вот допустим сейчас- def main_func(): def inner_func(): print('hello my friend') return inner_func b=main_func() b - выводит не так же как на видео из-за разницы операционных систем?
@RomanZverev-yc5qc
@RomanZverev-yc5qc 3 жыл бұрын
всё же норм
@user-sl2rh3wi3d
@user-sl2rh3wi3d Жыл бұрын
Люди добрый, я понял как они работают, но я пока не пойму где это можно применить, кто-нибудь может объяснить пожалуйста?
@m_i_r_k
@m_i_r_k 11 ай бұрын
В декораторах, например
@user-fc6nr8cr4p
@user-fc6nr8cr4p 3 жыл бұрын
Еще один вопрос - на сколько я понял функция nonlocal как бы ставит переменную на ступень выше, а функция global делает переменную глобальной сразу, так?
@egoroffchannel
@egoroffchannel 3 жыл бұрын
nonlocal не ставит, а говорит не искать переменную здесь, а ищи ее выше
@user-fc6nr8cr4p
@user-fc6nr8cr4p 3 жыл бұрын
@@egoroffchannel не так выразился, а global говорит - ищи переменную в глобальном ?
@atomicfuture1865
@atomicfuture1865 3 жыл бұрын
@@user-fc6nr8cr4p Да
@Abith72
@Abith72 2 жыл бұрын
Сказал, что это очень похоже на то, как ведут себя экземпляры класса. Но я что то не видел до этого тут обучалок про классы. Они есть?
@maestro1387
@maestro1387 2 жыл бұрын
Да, есть. В плейлисте про ООП
@fron5455
@fron5455 4 жыл бұрын
Привет у меня есть вопрос по пайтону. Например я ввожу в программу число с плавающей точкой и мне надо отбросить 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 жыл бұрын
Гугли, всё есть в тырнете.
@ECHO-bw4ce
@ECHO-bw4ce 5 ай бұрын
Что такое классы?
@andriiew325
@andriiew325 4 жыл бұрын
Corey Schafer , egoroff_channel 1love)))
@QScientist
@QScientist 2 жыл бұрын
я когда увидел функцию внутри функции, то удивился. А зачем нужно определять функцию внутри? можно же определить вторую функцию, а потом просто вызвать из main функцию внутреннюю и сохранить в переменную. По крайней мере так в языке си работает.
@tenelokis
@tenelokis Жыл бұрын
Это подводка к декораторам
@vsevolod9987
@vsevolod9987 Жыл бұрын
А почему в плейлисте этот урок аж тут,но в товем курсе он 43
@codelearner2986
@codelearner2986 Жыл бұрын
Ава имба
@kirillusenko
@kirillusenko 4 жыл бұрын
_Просмотры упали под ноль, почему?_ Из за видео для спонсоров?.. Подписчиков то _28 к_ . . .
@Mralex22801
@Mralex22801 4 жыл бұрын
Так всегда с обучением. Сначала интересно людям, потом надоедает.
@egoroffchannel
@egoroffchannel 4 жыл бұрын
просмотры никуда не подали, они держатся на том же уровне. Это образовательный канал, а не развлекательный
@gopherDooshit1
@gopherDooshit1 Жыл бұрын
нихуя не понял, но очень интересно
@VeihShizoo
@VeihShizoo Ай бұрын
Сложное
@andrewananenko797
@andrewananenko797 3 жыл бұрын
Абсолютно ничего не понятно
@Rusia-16
@Rusia-16 Жыл бұрын
Ни хера не понятно ! Зачем сохранять функцию в переменную и писать ее без скобок , если и так все работает без этого треша и все значения показываются во всех областях без проблем.
@johnyelasto
@johnyelasto 10 ай бұрын
На этом примере да, а если у тебя будет модуль с классами, то переменная будет не в зоне видимости, такие вот дела, маслята 🫣
@Webian
@Webian 2 жыл бұрын
Бред
@Mr717273747
@Mr717273747 3 жыл бұрын
Артём, открой свободный доступ к Части 2 - Замыкания в Python. Не будь жмотом. Тебе мало, что ты с рекламы имеешь?! Я тут зубрю твои видео-уроки “... на жопе волосы рву ...” чтоб освоить новое интересное ремесло, а ты ещё подляны делаешь?! Думаешь легко понять, когда у тебя язык заплетается от усталости? Открой свободный доступ к Части 2. Замыкания в Python - не издевайся над приличными людьми! … Не пропадай, дружище! ... … Мы тебя ценим! …
@YACommunity
@YACommunity Жыл бұрын
Опять сухие примеры замыканий.
Замыкания в Python Часть 2. Closure Python part 2
12:02
egoroff_channel
Рет қаралды 32 М.
Декораторы  в Python Часть 1. Decorator Python
11:06
egoroff_channel
Рет қаралды 120 М.
Secret Experiment Toothpaste Pt.4 😱 #shorts
00:35
Mr DegrEE
Рет қаралды 7 МЛН
Who has won ?? 😀 #shortvideo #lizzyisaeva
00:24
Lizzy Isaeva
Рет қаралды 65 МЛН
Пакеты в Python. Файл __init__, переменная __all__
11:48
ДЕКОРАТОР PYTHON / ВСЕ ЧТО НУЖНО ЗНАТЬ НА СОБЕСЕ
28:31
Сергей Соловьев
Рет қаралды 2,1 М.
ТОП 5 Ошибок в написании функций Python
12:46
Учим Python за 1 час! #От Профессионала
59:01
Хауди Хо™ - Просто о мире IT!
Рет қаралды 10 МЛН
Secret Experiment Toothpaste Pt.4 😱 #shorts
00:35
Mr DegrEE
Рет қаралды 7 МЛН