Развёрнутое пояснение:
1. Создаём defaults = {'theme': 'light'}.
2. Создаём пустой user = {}.
3. ChainMap(user, defaults) формирует цепочку поиска: сначала user, затем defaults.
4. Чтение config['theme'] не находит ключ в user и возвращает 'light' из defaults.
5. Запись config['theme'] = 'dark' всегда изменяет первый словарь цепочки, то есть user.
6. В user появляется {'theme': 'dark'}, а defaults остаётся {'theme': 'light'}.
7. print(defaults['theme']) выводит 'light'.
Почему это важно: ChainMap удобен для многоуровневых настроек — базовые значения, пользовательские, аргументы командной строки. Важно помнить, что присваивание пишет только в первый словарь, иначе можно случайно изменить общие дефолты или, наоборот, удивиться, почему изменение не дошло до последующих читателей конфига.
Post #4781
389
Python: задачки и вопросы
- ✍ 3