Какие приоритеты при выборе работодателя

Ответ

Ответ не найден

Ответ 18+ 🔞

А, слушай, вот тебе простая штука, которая вроде бы очевидная, но её постоянно забывают. Представь, что у тебя есть функция, которая делает что-то важное, но может сломаться. Например, читает файл.

def read_important_config():
    file = open("config.txt", "r")
    data = file.read()
    file.close()
    return data

Вроде всё норм, да? А теперь представь, что файла config.txt нет. Или он есть, но при чтении случилась какая-то хуйня — диск заскрипел и отвалился. Что будет? Правильно, file.close() никогда не выполнится. Файловый дескриптор повиснет в памяти, и если такую функцию в цикле вызывать, то можно дохуя ресурсов потратить впустую. Это как оставлять кран открытым — вода жрёт деньги, а ты потом удивляешься, счётчик накрутил.

Вот для этого и придумали контекстные менеджеры, или, как их ещё называют, with-блоки. Это такая магия, которая говорит: "Вот тебе ресурс, работай с ним внутри этого блока, а как только выйдем — я сам всё закрою, даже если посередине вылетит исключение".

Перепишем нашу функцию по-человечески:

def read_important_config():
    with open("config.txt", "r") as file:
        data = file.read()
    return data

Видишь эту конструкцию with open(...) as file:? Это оно. Теперь неважно, что случится внутри блока with — файл закроется гарантированно. Вылетело исключение? Закроется. Всё прошло успешно? Закроется. Ты просто вышел из блока? Тоже закроется, ёпта. Красота же.

А самое охуенное, что это работает не только с файлами. Базы данных, сетевые соединения, блокировки потоков — везде, где есть паттерн "открыл — поработал — закрыл". Всё это можно и нужно заворачивать в with. Это как взять за правило выключать свет, выходя из комнаты, — экономия на лицо, и соседи не будут говорить, что ты распиздяй.

Короче, запомни: если видишь open(), connect() или что-то подобное — сразу ищи, где бы это в with завернуть. Исключения — это когда ты реально понимаешь, зачем тебе ручное управление. А так — не выёбывайся, используй контекстные менеджеры. Мозгов меньше тратится, и код сразу выглядит как у адекватного человека, а не у того, кто только вчера print("Hello world") написал.