Посты канала Zen of Python

сначала новые

#5115Фото
Просмотры349−68%к среднему
Пересылки2
Реакции—
Комментарии0
#5114Текст
Просмотры623−42%к среднему
Пересылки1
Реакции1
Комментарии0
#5113Фото
Просмотры898−17%к среднему
Пересылки5
Реакции2
Комментарии0
Динамика просмотровСкрыть динамику

Рост просмотров

Часов после публикации

Показать таблицей
Часов после публикацииПросмотры
0 ч0
3 ч442
15 ч823
27 ч898
  1. Через 24 часа898
  2. Всего сейчас898
#5112Фото
Просмотры932−14%к среднему
Пересылки4
Реакции3
Комментарии0
Динамика просмотровСкрыть динамику

Рост просмотров

Часов после публикации

Показать таблицей
Часов после публикацииПросмотры
0 ч0
9 ч599
33 ч932
  1. Всего сейчас932
#5111Фото
Просмотры851−21%к среднему
Пересылки4
Реакции1
Комментарии0
Динамика просмотровСкрыть динамику

Рост просмотров

Часов после публикации

Показать таблицей
Часов после публикацииПросмотры
0 ч0
3 ч450
15 ч764
27 ч851
  1. Через 24 часа851
  2. Всего сейчас851
#5110Фото
Просмотры985−9%к среднему
Пересылки4
Реакции2
Комментарии1
Динамика просмотровСкрыть динамику

Рост просмотров

Часов после публикации

Показать таблицей
Часов после публикацииПросмотры
0 ч0
8 ч538
33 ч871
69 ч985
  1. Всего сейчас985
#5109Фото
Просмотры972−10%к среднему
Пересылки5
Реакции—
Комментарии0
Динамика просмотровСкрыть динамику

Рост просмотров

Часов после публикации

Показать таблицей
Часов после публикацииПросмотры
0 ч0
14 ч679
27 ч802
75 ч972
  1. Через 24 часа802
  2. Всего сейчас972
#5108Фото
Просмотры996−8%к среднему
Пересылки8
Реакции2
Комментарии0
Динамика просмотровСкрыть динамику

Рост просмотров

Часов после публикации

Показать таблицей
Часов после публикацииПросмотры
0 ч0
33 ч844
69 ч996
  1. Всего сейчас996
#5107Фото
Просмотры1 034−4%к среднему
Пересылки4
Реакции—
Комментарии0
Динамика просмотровСкрыть динамику

Рост просмотров

Часов после публикации

Показать таблицей
Часов после публикацииПросмотры
0 ч0
39 ч903
75 ч1 034
  1. Всего сейчас1 034
#5106Фото
Просмотры1 048−3%к среднему
Пересылки3
Реакции1
Комментарии2
Динамика просмотровСкрыть динамику

Рост просмотров

Часов после публикации

Показать таблицей
Часов после публикацииПросмотры
0 ч0
57 ч1 016
69 ч1 048
  1. Всего сейчас1 048
#5105Фото
Просмотры1 044−3%к среднему
Пересылки8
Реакции—
Комментарии0
Динамика просмотровСкрыть динамику

Рост просмотров

Часов после публикации

Показать таблицей
Часов после публикацииПросмотры
0 ч0
62 ч1 022
75 ч1 044
  1. Всего сейчас1 044
#5104Фото
Просмотры1 031−4%к среднему
Пересылки3
Реакции—
Комментарии0
#5103Фото
Просмотры1 043−3%к среднему
Пересылки4
Реакции—
Комментарии0
#5102Фото
Просмотры1 050−3%к среднему
Пересылки2
Реакции—
Комментарии0
#5101Фото
Просмотры1 053−2%к среднему
Пересылки5
Реакции2
Комментарии0
#5100Фото
Просмотры1 101+2%к среднему
Пересылки7
Реакции—
Комментарии0
#5099Фото
Просмотры1 107+3%к среднему
Пересылки8
Реакции2
Комментарии0
#5098Текст

ChainMap читает все слои, а пишет только в первый Для конфигурации удобно читать переопределения поверх значений по умолчанию. ChainMap делает это без предварительного слияния словарей: from collections import ChainMap defaults = {"timeout": 30} overrides = {} config = ChainMap(overrides, defaults) config["timeout"] = 5 print(overrides, defaults) Вывод: {'timeout': 5} {'timeout': 30}. Чтение ищет ключ в слоях по очереди, а присваивание меняет только первый словарь. Туда же направлены update и удаление. Ключ, который есть лишь в нижнем слое, удалить через цепочку не получится. Это живое представление исходных словарей, а не снимок: изменения в них видны через ChainMap. И копирования вложенных объектов здесь тоже нет. Если прочитанное значение оказалось общим списком, его изменение затронет этот список в исходном слое. Правило записи в первый словарь не означает изоляцию всех доступных через него данных.

Открыть в Telegram
Просмотры1 273+18%к среднему
Пересылки4
Реакции5
Комментарии0
#5097Текст
Просмотры1 333+24%к среднему
Пересылки5
Реакции0
Комментарии0
#5096Текст
Просмотры1 354+25%к среднему
Пересылки2
Реакции3
Комментарии0
#5095Текст
Просмотры1 391+29%к среднему
Пересылки3
Реакции—
Комментарии0
#5094Текст

Подмена в pytest может закончиться раньше теста Тест сначала проверяет код с подменённой зависимостью, а затем хочет вызвать настоящий объект. Если все изменения сделаны через обычную фикстуру monkeypatch, автоматический откат произойдёт лишь после завершения теста или использующей её фикстуры. Сузить срок жизни можно через with monkeypatch.context() as m. Подмены, зарегистрированные через m.setattr и другие методы этого контекста, откатятся при выходе из блока. После него можно проверять поведение с восстановленной зависимостью, не завершая тест. В примере pytest так ограничивают подмену functools.partial. Это важно: стандартной библиотекой пользуется и сам pytest, поэтому глобальная подмена может сломать тестовый раннер. Короткий контекст уменьшает время воздействия, но не делает любую подмену безопасной. Для своего кода документация рекомендует явную передачу зависимостей, если это возможно.

Открыть в Telegram
Просмотры1 338+24%к среднему
Пересылки3
Реакции—
Комментарии0
#5093Текст
Просмотры1 364+26%к среднему
Пересылки3
Реакции—
Комментарии0
#5092Текст

Pydantic может создать модель с неверными данными Наличие объекта BaseModel ещё не доказывает, что данные прошли проверку. В Pydantic V2 model_construct() создаёт модель без валидации. Если поле объявлено вложенной моделью, переданный туда словарь сам в неё не превратится. Метод не отключает вообще всё: значения полей по умолчанию по-прежнему подставляются. Зато extra="forbid" при таком создании не даст привычной ошибки за лишнее поле. Оно будет проигнорировано. Поэтому контракт обычного конструктора нельзя механически переносить на model_construct. В документации метода его предлагают для уже проверенных или заведомо доверенных данных. Выбирать этот путь только ради скорости тоже рано: в V2 разрыв сократился, а на простых моделях обычная валидация может оказаться быстрее. Прежде чем убрать проверку, измерьте свой сценарий и определите, кто теперь отвечает за корректность вложенных объектов.

Открыть в Telegram
Просмотры1 393+29%к среднему
Пересылки3
Реакции—
Комментарии0
#5091Текст
Просмотры1 415+31%к среднему
Пересылки2
Реакции2
Комментарии0