ch
Feedback

不要被骗子欺骗!Telemetrio 会找到并标记这些频道 👉 如果想查看标记,请订阅

Python: задачки и вопросы

Python: задачки и вопросы

前往频道在 Telegram

Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media

显示更多
6 872
订阅者
-124 小时
-147 天
-4930 天
帖子存档
Развёрнутое пояснение: 1. Определяется класс Key с методом __eq__, который сравнивает атрибут val. 2. В Python класс, определяющий __eq__, но не определяющий __hash__, автоматически получает __hash__ = None. 3. При выполнении строки cache = {Key(1): 'hit'} Python пытается вычислить хеш ключа, чтобы разместить его в словаре. 4. Поскольку Key.__hash__ равен None, объект считается нехешируемым, и создание словаря падает с TypeError: unhashable type: 'Key'. 5. Вызов cache.get(Key(1)) не выполняется, потому что программа прерывается раньше. Почему это важно: кастомные ключи для кэшей, конфигураций или агрегаций часто требуют своего сравнения. Если забыть реализовать __hash__, весь механизм ломается ещё на этапе создания dict или set. В dataclasses это решается через frozen=True для автоматического __hash__, а в собственных классах — явным определением __hash__.

Развёрнутое пояснение: 1. Первый вызов `load_users('a')` не находит ключ в кэше, выполняет `return []`, сохраняет созданный список в кэше и сразу добавляет в него `'u1'` через `.append`. Теперь в кэше лежит список `['u1']`. 2. Второй вызов `load_users('a')` попадает в кэш и возвращает тот же самый объект-список, а не новый. `.append('u2')` изменяет этот же объект, и он становится `['u1', 'u2']`. 3. Вызов `print(load_users('a'))` снова получает тот же объект из кэша и печатает `['u1', 'u2']`. Почему это важно: кэширование изменяемых объектов — распространённая ловушка при оптимизации репозиториев, загрузчиков конфигурации и API-клиентов. Если возвращаемый объект мутируется, кэш превращается в разделяемое изменяемое состояние, и разные вызовы начинают влиять друг на друга, что приводит к трудноуловимым багам в продакшене.

По шагам: 1. Когда Python встречает class A(metaclass=Meta), он не сразу выполняет тело класса. Сначала он спрашивает у метакласса: «в каком словаре хранить имена этого класса?» — и вызывает Meta.__prepare__. 2. Обычно __prepare__ возвращает пустой словарь, но здесь он возвращает {'x': 10}. То есть тело класса начинает выполняться в пространстве имён, где имя x уже существует и равно 10. 3. Выполняется строка result = x + 5. Python ищет x в текущем пространстве имён, находит 10 и записывает result = 15. 4. Следующей выполняется строка x = 1 — она перезаписывает ключ x в том же словаре. Но result уже вычислен, задним числом он не пересчитывается. 5. В итоге у класса A два атрибута: result = 15 и x = 1. Поэтому print(A.result) выводит 15. Почему это важно __prepare__ — редкий хук, но он показывает главное: тело класса — это обычный код, выполняющийся в словаре, которым можно управлять. Именно на этой механике работают Django-модели: вы пишете class Movie(models.Model) с обычными атрибутами, а метакласс превращает их в поля таблицы, валидацию и запросы к базе. Понимание таких вещей — разница между «использую фреймворк» и «понимаю, что он делает». Если хотите прокачаться именно во втором, посмотрите курс Middle Python от Практикума PRO: за 6 месяцев вы глубоко разберёте Django и его ORM, асинхронность на FastAPI, микросервисную архитектуру и соберёте бэкенд из 10+ сервисов. Реклама. Рекламодатель: АНО ДПО "Образовательные технологии Яндекса" ИНН 7704282033, erid: 2W5zFJM1sK7

Развёрнутое пояснение: В сигнатуре функции f параметры a и b стоят до /, поэтому их можно передать только позиционно. Параметр d стоит после *, поэтому его можно передать только по имени. Параметр c находится между / и *, поэтому допускает оба варианта. Корректен вызов с позиционными a, b и именованными c, d.

Привет! Весь июль мы будем вести этот канал в партнёрстве с Яндекс Практикумом PRO. Драматически ничего не меняется: мы продолжим выкладывать задачки и решения — даже более системно и регулярно, чем последние пару месяцев. А ещё расскажем про большой мидловый курс по Python. Для нас это новый формат соседства двух брендов — надеемся, будет полезно. А пока, всем отличных выходных 🌴

Развёрнутое пояснение: Код удаляет ключ 'a', после чего порядок становится ['b']. Затем 'a' вставляется заново, а не восстанавливается на старом месте, поэтому итоговый порядок — ['b', 'a']. Это поведение гарантировано с Python 3.7.

Обучение английскому для тех, у кого дедлайн был вчера Оффер в зарубежную компанию или релокация на носу? Александр Моргунов
Обучение английскому для тех, у кого дедлайн был вчера Оффер в зарубежную компанию или релокация на носу? Александр Моргунов даст крепкую базу и много живой разговорной практики! Кому подойдёт обучение Школьникам (9–11 класс) — подготовка к лингвистическим олимпиадам, поступление в вуз (в том числе зарубежный при релокации с родителями). Студентам — международные языковые экзамены, программы по обмену и учёба за границей, защита диплома на английском. Специалистам — собеседования, переговоры и презентации без переводчика, мягкая релокация, работа на международном уровне из любой точки мира, международные экзамены и курсы повышения квалификации. Заниматься можно по будням, 2 занятия в неделю по 80 минут. Это регулярный ритм, спокойное погружение в новый материал, понятный объём домашки и много живой практики. Идеально, если хочется учиться системно и с поддержкой преподавателя. Другой формат — выходные, с 10:00 до 19:00, 1–2 раза в месяц. Скорее кураторство, чем пошаговое обучение: разбираете теорию (на начальных уровнях), закрываете пробелы, а основную практику вы добираете самостоятельно или прямо на работе. Подходит тем, у кого английский уже звучит в жизни каждый день. Занятия индивидуальные или в мини-группах до 4-х человек, проводятся онлайн или с выездом в ваш офис в Москве. Начните с бесплатной вводной сессии и подберите удобный формат! Запись на вводную сессию, больше подробностей о форматах и ценах вы найдёте на сайте: alexandermorgunov.ru Это #партнёрский пост