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