50 команд на Python часть 6. Модуль with, Print, memoryview, Файлы, Выдача

31. Модуль with
Команда 'with' дает возможность обернуть блок кода методами, определенными менеджером контекста. Это может помочь очистить код и облегчить чтение того, что должен делать данный фрагмент кода спустя месяцы. Классическим примером использования 'with' является работа с файлами. Вы можете использовать что-то вроде "with open ("myfile. txt", "r") as f:". Это откроет файл и подготовит его к чтению. Затем вы можете прочитать файл в блоке кода с помощью 'data=fread ()'. Самое приятное в этом то, что файл будет автоматически закрыт при выходе из блока кода, независимо от причины. Таким образом, даже если блок кода выбросит исключение, вам не нужно беспокоиться о закрытии файла как части обработчика исключений. Если у вас есть более сложный пример "with", вы можете создать класс менеджера контекста, чтобы помочь.
32. Print
Самым прямым способом вывода информации пользователю является команда print. Она отправляет текст в окно консоли. Если вы используете версию 2.X Python, есть несколько способов использовать команду print. Самый распространенный способ - просто вызвать ее как 'print "Some text"'. Вы также можете использовать print с тем же синтаксисом, что и для любой другой функции. Так, приведенный выше пример будет выглядеть как 'print ("Some text")'. Это единственная форма, доступная в версии 3.X. Если вы используете синтаксис функции, вы можете добавить дополнительные параметры, которые дают вам более тонкий контроль над выводом. Например, вы можете задать параметр 'file=myfile.txt' и получить вывод команды print в заданную текстовую папку. Команда также принимает любой объект, имеющий некоторое строковое представление.
33. Memoryview
Иногда вам нужно получить доступ к необработанным данным некоторого объекта, обычно в виде буфера байтов. Вы можете скопировать эти данные и поместить их, например, в массив байтов. Но это означает, что вы будете использовать дополнительную память, а для больших объектов это может оказаться неприемлемым. Команда 'memoryview (имя_объекта)' оборачивает объект, переданный команде, и предоставляет интерфейс к необработанным байтам. Она предоставляет доступ к этим байтам по одному элементу за раз. Во многих случаях размер элементов равен одному байту. Но, в зависимости от деталей объекта, вы можете получить элементы большего размера. Размер элемента в байтах можно узнать с помощью свойства 'itemsize'. Создав представление памяти, вы можете получить доступ к отдельным элементам, как вы получаете элементы из списка (например, mem_view[1]).

34. Файлы
При работе с файлами необходимо создать объект файла, чтобы взаимодействовать с ним. Команда file принимает строку с именем и местоположением файла и создает экземпляр объекта file. Затем вы можете вызывать такие методы объекта файла, как 'open', 'read' и 'close', чтобы получить данные из файла. Если вы выполняете обработку файла, вы также можете использовать метод 'readline'. Для упрощения процесса открытия файла существует явная команда 'open ()'. Она принимает строку с именем файла и необязательный параметр, который представляет собой строку, определяющую режим работы. По умолчанию файл открывается только для чтения ('r'). Вы также можете открыть его для записи ('w') и добавления ('a'). После открытия файла возвращается объект файла, чтобы вы могли работать с ним дальше. Вы можете читать его, записывать в него и, наконец, закрыть его.
35. Выдача
Во многих случаях функции может потребоваться передать контекст выполнения другой функции. Это относится к генераторам. Предпочтительным методом для генератора является то, что он вычисляет следующее значение только тогда, когда оно запрашивается через метод 'next ()'. Команда 'yield' сохраняет текущее состояние функции-генератора и возвращает управление выполнением вызывающей функции. Таким образом, сохраненное состояние генератора перезагружается, и генератор начинает работу с того места, где он остановился, чтобы вычислить следующее запрашиваемое значение. Таким образом, вам нужно иметь достаточно памяти, чтобы хранить только минимум для вычисления следующего необходимого значения, а не хранить в памяти все возможные значения сразу.