Генераторы словарей и модули Рython
Функции в языке Python Функции в языке PythonВсе функции в языке Python возвращают какое-либо значение, хотя вполне возможно (и часто так и делается) просто игнорировать это значение. Возвращаемое значение может быть единственным значением или кортежем значений,...
Реализация генераторов Реализация генераторовМы рассмотрели коллекции-последовательности, tuple, collections, na-medtuple и list, поддерживающие, как и строки, возможность извлечения срезов. Также было рассмотрено использование оператора распаковывания...
Парсинг документов XML Парсинг документов XMLXML: Для парсинга документов XML широко используются два основных подхода. Один из них основан на анализе DOM (Document Object Model -объектная модель документа), а другой - на использовании SAX (Simple API for XML - упрощенный...
Копирование коллекций Копирование коллекцийКопирование коллекций: Поскольку в языке Python повсюду используются ссылки на объекты, когда выполняется оператор присваивания (=), никакого копирования данных на самом деле не происходит. Если справа от оператора находится литерал,...
Модуль CharGrid
Чтобы избежать необходимости проверки типа операционной системы, под управлением которой выполняется программа, при каждом вызове функции clear_screen , мы создаем платформозависимую функцию clear_screen на этапе импортирования модуля и с этого момента постоянно используем ее. Это возможно благодаря тому, что в языке Python инструкция def является самой обычной инструкцией - когда интерпретатор достигает условной инструкции if, он выполняет либо первую, либо вторую инструкцию def, динамически создавая ту или иную версию функции clear_screen .

Так как определение функции находится за пределами какой-либо другой функции, она по-прежнему остается в глобальной области видимости и обращаться к ней можно так же, как к любой другой функции в модуле. После создания функции мы явно определяем строку документирования для нее - такой прием позволяет избежать необходимости дважды записывать одну и ту же строку документирования в двух местах, а, кроме того, иллюстрирует, что строка документирования - это всего лишь атрибут функции. В число прочих атрибутов входят имя модуля функции и ее собственное имя.

Эта функция использует инструкцию assert для обеспечения политики выявления ошибок программирования; в первом случае - ошибки при попытке установить размеры сетки меньше, чем 1x1. Если символ фона определен, применяется еще одна инструкция assert, чтобы гарантировать, что эта строка содержит точно один символ; в противном случае возбуждается исключение с текстом сообщения из шаблона _CHAR_ASSERT_TEMPLATE, в котором поле замещается полученной строкой char.

К сожалению, мы вынуждены использовать инструкцию global, потому что внутри этой функции приходится изменять глобальные переменные. Содержимое для переменной _grid создается с помощью двух вложенных друг в друга генераторов списков. Прием с применением оператора дублирования списка, такой как [[char] columns] rows, не даст должного результата, потому что внутренние списки будут представлять собой всего лишь поверхностные копии одного и того же списка. Но такой фрагмент сложнее для понимания и гораздо длиннее, чем генераторы списков.

Строка документирования содержит два теста, один из которых, как предполагается, будет проходить успешно, а другой будет возбуждать исключение. Задавая в доктестах исключения, необходимо вставлять строку "Traceback"; она всегда одна и та же и сообщает модулю doctest, что ожидается исключение. Затем взамен строк с диагностическими сообщениями (количество которых может быть разным) следует указать многоточие и завершить тест строкой с именем исключения, которое ожидается получить.
Навигация: 1 2 3 4
 
 
© Copyright