Выполнение строк программного кода Python

vypolnenie strok programmnogo koda python Текст и язык

Этот модуль реализует калькулятор с графическим интерфейсом в 45 строках программного кода (считая комментарии и пустые строки). Но если честно, то он несколько «мошенничает»: вычисление выражений делегируется интерпретатору Python. На самом деле большую часть работы здесь делают встроенные функции eval и exec:

eval

Анализирует, вычисляет и возвращает результат выражения, представленного в виде строки.

exec

Выполняет произвольную инструкцию Python, представленную в виде строки, но не возвращает значение.

Обе принимают дополнительные словари, которые могут использоваться как глобальные и локальные пространства имен для присваивания и вычисления имен, используемых в строках программного кода. Словарь self.names в калькуляторе становится таблицей символов для выполнения выражений калькулятора. Родственная функция Python compile может использоваться для предварительного компилирования строк кода до передачи их в eval и exec (используйте ее, если нужно выполнять одну и ту же строку многократно).

По умолчанию пространством имен строки программного кода является пространство имен вызывающей программы. Если здесь не передавать словари, то строки будут выполняться в пространстве имен метода eval. Поскольку локальное пространство имен метода исчезает после возврата из него, не было бы возможности сохранить имена, присваиваемые в строке. Обратите внимание на использование встроенных обработчиков исключений в методе eval:

1.     Сначала предполагается, что строка является выражением, и вызывается встроенная функция eval.

2.     В случае неудачи из-за синтаксической ошибки строка вычисляется как инструкция, с помощью функции exec.

3.     Если и эта попытка оказывается безуспешной, сообщается об ошибке в строке (синтаксическая ошибка, неопределенное имя и так далее).

Инструкции и недопустимые выражения могут разбираться дважды, но издержки при этом не важны, и нельзя узнать, является ли строка выражением или инструкцией, не разобрав ее вручную. Обратите внимание, что кнопка eval (вычислить) вычисляет выражения, а кнопка = устанавливает переменные Python, выполняя оператор присваивания. Имена переменных являются комбинациями клавиш букв «abcd» (или любым именем, введенным непосредственно). Они присваиваются и вычисляются в словаре, используемом для представления пространства имен калькулятора.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий