и посмотреть медиа
Code on a Napkin - Python coding
и посмотреть медиа
Channel about programming in Python and other languages. Simple explanations and codes.
Channel about programming in Python and other languages. Simple explanations and codes.
AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.
Resource for those interested in programming. Focus on Python, but covers other topics as well. Simple examples and breakdowns.
Знаете ли вы, что 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 Кусочки кода
Открыть канал и посмотреть медиаOnly registered users can share their opinion.
Be the first to share your impression of this resource!