Иногда нужно пропустить определённые исключения, не оборачивая код в громоздкий
try/except
.Для этого есть
suppress()
из модуля contextlib
.from contextlib import suppress
data = {"a": 1}
with suppress(KeyError):
print(data["b"]) # Ошибка будет проигнорирована
print("Код продолжает работать")
Код продолжает работать
📌 Удобно, когда ошибка допустима и не требует обработки — например, при удалении файла, который может отсутствовать.
Please open Telegram to view this post
VIEW IN TELEGRAM
defaultdict
из модуля collections
автоматически создаёт значение для нового ключа, если он ещё не существует.from collections import defaultdict
data = defaultdict(list)
data["users"].append("Анна")
data["users"].append("Борис")
print(data)
defaultdict(<class 'list'>, {'users': ['Анна', 'Борис']})
📌 Удобно при группировке данных и подсчёте значений — не нужно проверять, есть ли ключ в словаре.
Please open Telegram to view this post
VIEW IN TELEGRAM
Метод словаря
setdefault()
возвращает значение по ключу, а если ключ отсутствует — создаёт его с указанным значением.user = {"name": "Анна"}
city = user.setdefault("city", "Москва")
print(city) # Москва
print(user) # {'name': 'Анна', 'city': 'Москва'}
📌 Удобно для инициализации значений в словаре без лишних проверок if key not in dict.
Please open Telegram to view this post
VIEW IN TELEGRAM
itertools.chain()
позволяет перебирать элементы из нескольких итерируемых объектов так, будто это один.from itertools import chain
a = [1, 2]
b = [3, 4]
c = [5]
for x in chain(a, b, c):
print(x, end=" ")
1 2 3 4 5
📌 Удобно, когда нужно пройтись по нескольким спискам подряд без создания нового объединённого списка.
Please open Telegram to view this post
VIEW IN TELEGRAM
@dataclass
из модуля dataclasses
автоматически создаёт методы __init__
, __repr__
, __eq__
и другие на основе аннотаций полей.from dataclasses import dataclass
@dataclass
class User:
name: str
age: int
u = User("Анна", 25)
print(u) # User(name='Анна', age=25)
📌 Удобно для хранения данных: меньше шаблонного кода, больше читаемости.
Please open Telegram to view this post
VIEW IN TELEGRAM
enumerate()
в Python и когда её применять?Функция
enumerate()
позволяет итерироваться по элементам последовательности вместе с их индексами. Это избавляет от необходимости вручную вести счётчик и делает код более чистым и читаемым.fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits, start=1):
print(index, fruit)
# Вывод:
# 1 apple
# 2 banana
# 3 cherry
enumerate() применяют, когда нужен доступ к индексу и самому элементу одновременно — например, при отладке, нумерации строк, формировании таблиц или логов. Это делает код более питоничным и компактным.
Please open Telegram to view this post
VIEW IN TELEGRAM
В Python декораторы позволяют изменять поведение функций без изменения их кода.
Это "обёртки", которые выполняются до или после основной функции.
def logger(func):
def wrapper(*args, **kwargs):
print(f"Вызов функции {func.__name__}")
return func(*args, **kwargs)
return wrapper
@logger
def say_hello(name):
print(f"Привет, {name}!")
say_hello("Анна")
📌 Здесь @logger добавляет логирование при вызове say_hello, не меняя её код.
Please open Telegram to view this post
VIEW IN TELEGRAM
List comprehension в Python позволяет создавать списки в одну строку вместо циклов. Это делает код компактнее и читаемее
# Обычный способ
squares = []
for i in range(1, 6):
squares.append(i**2)
# List comprehension
squares_compact = [i**2 for i in range(1, 6)]
print(squares_compact) # [1, 4, 9, 16, 25]
📌 Это удобный инструмент для фильтрации и преобразования данных в Python.
Please open Telegram to view this post
VIEW IN TELEGRAM
Генераторы — это функции, которые возвращают значения по одному с помощью ключевого слова yield.
В отличие от списков, они не хранят все данные в памяти сразу, а создают их "на лету".
def count_up_to(n):
for i in range(1, n + 1):
yield i
for num in count_up_to(5):
print(num)
📌 Генераторы экономят память и ускоряют работу с большими данными.
Please open Telegram to view this post
VIEW IN TELEGRAM