Добавить в корзинуПозвонить
Найти в Дзене

Вариации на тему «Hello, World!» в Python. Вариант 10. Используем функцию eval()

Продолжаем вариации на тему «Hello, World!» в Python. *** eval("'Hello, World!'") *** Встроенная функция eval() в Python принимает строку и выполняет её как код на языке Python. Если передать ей строку, содержащую корректное выражение, она вычислит его и вернёт результат. • Если передать eval("2 + 2"), функция вернёт число 4. • Если передать eval("print('test')"), функция выполнит команду печати и выведет test. • Если передать просто текст (строковый литерал), функция вернёт этот текст без изменений. *** 1. Внутри функции eval() находится строка: 'Hello, World!'. В Python для создания строк можно использовать как одинарные ('), так и двойные (") кавычки. Здесь текст обрамлён в одинарные кавычки. 2. Для Python эта строка является валидным выражением (строковым литералом). 3. Функция eval() вычисляет это выражение. Результатом вычисления строкового литерала является сам объект строки. 4. Итог: результатом работы этого выражения будет строка 'Hello, World!'. *** eval('"Hello, World!"
Оглавление

Продолжаем вариации на тему «Hello, World!» в Python.

***

1-й вариант (внешние кавычки двойные, внутренние одинарные)

eval("'Hello, World!'")

***

Что делает функция eval()

Встроенная функция eval() в Python принимает строку и выполняет её как код на языке Python. Если передать ей строку, содержащую корректное выражение, она вычислит его и вернёт результат.

Если передать eval("2 + 2"), функция вернёт число 4.

Если передать eval("print('test')"), функция выполнит команду печати и выведет test.

Если передать просто текст (строковый литерал), функция вернёт этот текст без изменений.

***

Разбор выражения: eval("'Hello, World!'")

1. Внутри функции eval() находится строка: 'Hello, World!'.

В Python для создания строк можно использовать как одинарные ('), так и двойные (") кавычки. Здесь текст обрамлён в одинарные кавычки.

2. Для Python эта строка является валидным выражением (строковым литералом).

3. Функция eval() вычисляет это выражение. Результатом вычисления строкового литерала является сам объект строки.

4. Итог: результатом работы этого выражения будет строка 'Hello, World!'.

***

2-й вариант (внешние кавычки одинарные, внутренние двойные)

eval('"Hello, World!"')

-2

***

Разбор выражения: eval('"Hello, World!"')

1. Здесь ситуация немного сложнее из-за вложенных кавычек. Внешняя строка, переданная в функцию eval(), обрамлена в одинарные кавычки: '"Hello, World!"'.

2. Внутри этой внешней строки находится текст "Hello, World!", который сам по себе является строковым литералом, но обрамлён в двойные кавычки.

3. Python не путается в кавычках: он видит внешнюю строку как единый объект, а её содержимое – как текст.

4. Функция eval() берёт содержимое этой внешней строки (то есть "Hello, World!") и пытается выполнить его, как код.

5. Поскольку "Hello, World!" – это тоже корректный строковый литерал, результатом вычисления будет объект строки.

6. Итог: результатом работы этого выражения будет строка "Hello, World!".

***

В чём разница?

С точки зрения результата выполнения кода разницы нет: оба выражения вернут строку с текстом Hello, World!.

Оба этих выражения выполняют одну и ту же задачу, но используют разные типы кавычек для обрамления строки.

Разница заключается лишь в синтаксисе:

В первом случае мы передаём в eval() строку с одинарными кавычками.

Во втором случае мы передаём строку с двойными кавычками.

Это часто используется на практике, чтобы избежать конфликтов кавычек.

Например, если внутри строки нужно использовать апостроф ('), саму строку удобнее заключить в двойные кавычки:

"It's a beautiful day."

Если бы мы попытались написать это так: 'It's a beautiful day.', Python выдал бы синтаксическую ошибку, так как увидел бы конец строки на апострофе.

***

Примечания

1. Как правило, «Hello, World!» – это первая программа в учебниках по программированию для начинающих.

2. Традиция использования фразы «Hello, World!» в качестве тестовой программы была введена в книге «Язык программирования Си» Брайана Кернигана и Денниса Ритчи (Brian Kernighan, Dennis Ritchie. The C Programming Language), опубликованной в 1978 году.