Комментарии:
в UI библиотеке Gradio очень непонятное использование менеджера контекста
import gradio as gr
with gr.Blocks() as demo:
gr.Markdown("...")
with gr.Tab("Flip Text"):
gr.Markdown("...")
demo.launch()
Не понятно как это работает)
Для чего нужен менеджер контекста и где его применять?.. для безопасности кода и применять везде где только можно. Имхо. Потому как класс который создаёт объект и должен его уничтожать… особенно если вы работаете с ресурсами. Инициализация как захват ресурса
ОтветитьВопрос на 7й минуте - когда мы создаём enter метод, присходит переприсваивание, и таким образом копируем объект, копирование поверхностное или глубокое?.. вообще в питоне при вот таком переприсваивании какое копирование происходит?..
ОтветитьОшибку поправьте или меня - имя переменной мен контекста полагаю должно быть fp, а не f… (2-я минута)
ОтветитьУра! В питоне тоже есть идиомы владения🥴 безопасность повышаем🤪
ОтветитьКлассное объяснение!
ОтветитьУже вроде и с ООП разобрался, декораторы, генераторы, на джанго и DRF написал несколько приложений, но вот менеджер контекста все равно вызывает у меня трудности. 😅
Ответитьвсе понял, кром того как это работает: self.__v[:] = self.__temp
ОтветитьВзял и купил курс от поколения, уперся в задачу и не могу решить. Посмотрел видеоурок от Балакирева - понял что делал не так. Покупка была ошибкой.
ОтветитьСпасибо за урок! Хочу задать вопрос, как вы выделяя несколько строк помещаете их все в комментарии (# перед всеми) или ставите перед всеми отступ (tab)? Просто когда я так делаю в pycharm, строки попросту заменяются. Это настраивается как - то? Заранее спасибо.
Ответитьспасибо! интересный урок
ОтветитьСпасибо автору, лучший канал как по мне
ОтветитьСергей, а можете поподробнее сказать по поводу return False в exit
Ответить👍👍👍👍👍👍👍
ОтветитьДумаю стоило упомянуть хотя-бы разок, что используя конструкцию среза вы получаете поверхностную копию списка, для полного копирования (например когда у вас список объектов) можно использовать deepcopy из библиотеки copy.
ОтветитьСорри, но этот урок у вас вышел очень запутанным и непонятным
ОтветитьОфициально заявляю. Более полезных уроков по питону, я не видел. Двужище, ты лучший.
ОтветитьБольшое спасибо за замечательный урок и за этот курс!!!
ОтветитьНаверное первая тема которая до конца не ясна В частности все случаи с параметрами exit- но пока для работы достаточно и этих знаний
ОтветитьСпасибо за реально крутое объяснение менеджера контекста.
Ответитьпредыдущий материал курса ООП зашел на ура. но в этой теме возникла какая-то каша.
1) на 2.50 Вы пишете заголовок слайда "Менеджер контекста (with)" и вначале говорите "ключевое слово with, то есть это и есть менеджер контекста". на том же слайде на 2.50 написано, что менеджер контекста идет после ключевого слова with. так что из этого все же менеджер контекста?
2) еще больше путаницы внес первый тест после видео. один из вариантов ответа "менеджер контекста образует свою локальную область видимости (подобно функциям, тело которых находится внутри локальной области видимости)". в видео же вы создаете менеджер контекста - класс DefenderVector, далее пользуетесь экземпляром этого класса как менеджером контекста. т.е. у менеджера контекста есть своя локальная область видимости, в которой при инициализации формируется переменная self.__v. тогда почему указанный вариант ответа в тесте неправильный? исходя из того, что этот вариант ответа не верный, стоит полагать все же что менеджер контекста это with? однако для примера создания менеджера контекста вы прописываете то, что идет ПОСЛЕ with.
3) допустим, менеджер контекста - это объект после with. тогда если мы пишем with open('file') as file менеджером контекста будет open()? но ведь это же стандартная функция питона, а не менеджер контекста.
Уважаемый Сергей, очень ценю Ваш труд, понимаю что материала много и грамотно его структурировать - не простая задача. в этот раз получилось как-то запутанно
Спасибо! Гениально!
ОтветитьВеликолепный урок! Спасибо за то, что Вы делаете)
Ответитьвсе понятно кроме
self.__v[:] = self.__temp
вроде более логичной выглядит запись
self.__v = self.__temp
но тогда self.__v приобретает ссылку на другой объект (изменяется id), а v1 продолжает ссылаться на изначальный список со старым id
после присвоения self.__v[:] = self.__temp
self.__v стал ссылаться на другой список, при том у него остался изначальный id
за ним поменяется и v1
Получается, в результате self.__v[:] = self.__temp
старый список затирается и там где он хранился в памяти возникает новый список?
не понимаю логику. можно где то подробнее это разузнать?
Я правильно понимаю, что именно слово with определяет порядок вызова и делает сам вызов методов _enter__, __exit_ ? потому как код dv = DefendVector(v1)... не работает, хотя методы в классе переопределены
ОтветитьХорошие уроки. Нам ещё везёт что нет задании. ☺️☺️☺️
ОтветитьБольшое спасибо! Хотлеось бы более подробно узнать про остальные праметры в _exit_
ОтветитьДва дня не мог понять, почему при изменении "self.__v" меняется сам "v1", ведь нигде нет кода типа: "v1 = self.__v[:]".
В итоге до меня дошло, что "v1", "v", "self.__v" это все ссылки на один и тот же список, у них у всех один и тот же id, и меняя один мы меняем все остальные.
Круто! Вы где учились?
ОтветитьСпасибо за Ваши уроки. Вы очень хорошо объясняете. Скажите пожалуйста, Сергей, а вы планируете урок по асинхронному программированию на пайтон?
Ответитьподскажи пожалуйста не могу врубиться) то что мы делаем в def _enter_ когда копируем список через self._temp = self.__v[:] понятно. а то что мы делаем в def __exit_ когда обратно копируем уже измененный список self.__v[:] = self.__temp в self.__v. что тут делает [:] непонятно(
ОтветитьСпасибо! Получается, что open это все таки не функция, а целый класс, где реализованы методы enter, exit, call? Т.е. мы можем в свой любой класс добавить функциональность менеджера контекста?
ОтветитьБольшое спасибо. Очень интересно и полезно. Применю.
Ответить👍
ОтветитьСпасибо :)
ОтветитьСпасибо большое !
ОтветитьДобрый день! Спасибо большое за все Ваши уроки. Они очень полезны. Хотел спросить а по ООП в Python не планируется ли курс на Stepik?
Ответить👍
ОтветитьСпасибо за уроки!
Ответить