и посмотреть медиа
Код на салфетке - Python кодинг
и посмотреть медиа
Канал о программировании на Python и других языках. Простые объяснения и коды.
Канал о программировании на Python и других языках. Простые объяснения и коды.
AI бот для озвучки текста и клонирования голоса в Telegram. Создавай аудио с помощью нейросети быстро и просто.
Ресурс для интересующихся программированием. Фокус на Python, но охватывает и другие темы. Простые примеры и разборы.
Знаете ли вы, что defaultdict создает записи при чтении? Удобно использовать defaultdict чтобы не проверять наличие ключей. Но с ним есть подвох: обращение к несуществующему ключу через d[key] не просто вернет значение по умолчанию, а создаст запись в словаре. Словарь растет просто от того, что его читают: from collections import defaultdict d = defaultdict(list) print(len(d)) # 0 # Читаем несуществующий ключ result = d["users"] print(len(d)) # 1 print(d) # defaultdict(, {'users': []}) # Ключ 'users' теперь существует в словаре Обращение через d["users"] вызвало factory-функцию (list), создало пустой список и записало его в словарь. Это не баг – так работает __missing__, который defaultdict переопределяет. Проблема становится особенно заметной в циклах: from collections import defaultdict config = defaultdict(str) config["host"] = "localhost" config["port"] = "5432" # Проверяем наличие опциональных ключей optional_keys = ["timeout", "ssl", "pool_size"] for key in optional_keys: value = config[key] # Вместо проверки – создаются записи print(dict(config)) # {'host': 'localhost', 'port': '5432', 'timeout': '', 'ssl': '', 'pool_size': ''} # Три мусорных ключа из ниоткуда Каждый config[key] для несуществующего ключа создал пустую строку и сохранил ее. Если потом итерироваться по config или сериализовать его – в данных будет мусор. Безопасная альтернатива – .get(), который не трогает словарь: from collections import defaultdict d = defaultdict(list) # .get() не вызывает __missing__ result = d.get("users") print(result) # None print(len(d)) # 0 # Проверка через in тоже безопасна print("users" in d) # False print(len(d)) # 0 .get() возвращает None (или указанный default), но не создает запись. Оператор in тоже не вызывает __missing__. defaultdict вызывает factory-функцию и создает запись при любом обращении через d[key] к несуществующему ключу. Для безопасного чтения без побочных эффектов лучше использовать .get() или проверку через in. Код на салфетке x Кусочки кода
Открыть канал и посмотреть медиаТолько зарегистрированные пользователи могут делиться своим мнением.
Станьте первым, кто поделится своим впечатлением об этом ресурсе!