Рубрики
Без рубрики

Pythonic Code: оператор с

Этот пост продолжает серию на «Pythonic» коде. Pythonic Code – это код, который хорошо соответствует дизайну … Tagged с Python.

Pythonic Code (6 серии деталей)

Этот пост продолжает серию на «Pythonic» коде. Pythonic Code – это код, который хорошо соответствует дизайну языка питона. Ранее я писал о Список понимания как мощный способ манипулировать структурой данных списка Python. Этот пост будет охватывать с утверждение.

А с заявлением

Одна задача, с которой вы, вероятно, столкнетесь, когда программирование Python – это необходимость открыть файл. Этот файл может содержать таблицы данных или изображений котят. Что бы вы ни делали, вы столкнетесь с Open функция Давайте проработаем мыслительный эксперимент, который может помочь объяснить, почему вы должны использовать с Анкет

Если вы новичок в Python, вы можете открыть файл так:

f = open('kitteh.jpg', 'rb')
cat_pic = f.read()
# Do other stuff with the cat picture.

Поговорив с другом с большим опытом Python, чем вы, вы узнаете, что должны закрывать файлы, иначе операционная система в конечном итоге столкнется с проблемами (потому что она может отслеживать только ограниченное количество открытых файлов). Вы переписываете свой код:

f = open('kitteh.jpg', 'rb')
cat_pic = f.read()
# Do other stuff with the cat picture.
f.close()

Тогда вы узнаете, что ошибки могут произойти. Будучи хорошим разработчиком, вы пытаетесь справиться с любыми ошибками.

try:
    f = open('kitteh.jpg', 'rb')
    cat_pic = f.read()
    # Do other stuff with the cat picture.
    f.close()
except:
    print('oops, something went wrong.')

Ваш друг говорит вам, что вы добавили ошибку. Какая? Как это могло быть? Она говорит вам, что ошибка может произойти до того, как файл будет закрыт. Вы идете читать больше документации Python и узнать о Наконец Анкет Код снова переработан, чтобы выглядеть так:

try:
    f = open('kitteh.jpg', 'rb')
    cat_pic = f.read()
    # Do other stuff with the cat picture.
except:
    print('oops, something went wrong.')
finally:
    f.close()

Этот код не является звездным. Если вам пришлось написать 200 строк дополнительного кода для «делать других вещей», то между открытием и закрытием файла существует большое расстояние. Посмотрев другой способ, есть много места между настройкой чего -либо и разрывом его позже.

Это идеальное место для использования с Анкет Давайте пересмотрим код с с утверждение.

with open('kitteh.jpg', 'rb') as f:
    cat_pic = f.read()
try:
    # Do other stuff with the cat picture.
except:
    print('oops, something went wrong.')

Сначала вы можете подозревать этот код. Где это сделал Закрыть позвонить? с Заявление использовало дополнительную концепцию под названием A Контекст -менеджер Анкет Контекстные менеджеры предназначены для обработки настройки и разрушения для всего, что это нужно. Контекст -менеджер – это какой -то код, который реализует __enter__ и __exit__ метод

Когда Open используется с с Заявление, специальный контекстный менеджер называется. После масштаба с Block Pass (т.е. чтение содержимого файла в cat_pic ), интерпретатор выполнит __exit__ Метод на контекстном диспетчере. Open Контекст -менеджер закроет файл в __exit__ Анкет Вся эта работа аккуратно спрятана от разработчика. У вас есть гарантия, что файл будет закрыт и не должен выполнять эту работу самостоятельно.

Open Контекст -менеджер, вероятно, является наиболее распространенным использованием с утверждение. Другое использование с может включать в себя потоки блокировки, таймеры или даже более приятные интерфейсы для исключений модульного тестирования. Наконец, Python позволяет вам создавать собственных контекстных менеджеров. Проверить контекст для получения дополнительной информации. Я включил этот пример, чтобы дать вам быструю идею в действии.

>>> from contextlib import contextmanager
>>> @contextmanager
... def praise():
...     print('You can do it.')
...     yield
...     print('You made it.')
...
>>> with praise():
...     print('I am trying to code.')
...
You can do it.
I am trying to code.
You made it.

с Заявление является еще одним ценным инструментом для вашего шага Python Programmer Toolbelt. Ключевым моментом, который следует помнить, это то, что это может помочь вам очистить любой код, где вам нужно наладить или разрушить вещи.

Эта статья впервые появилась на mattlayman.com Анкет

Pythonic Code (6 серии деталей)

Оригинал: “https://dev.to/mblayman/pythonic-code-the-with-statement-2dka”