Подтвердить что ты не робот

Строка с префиксом 'f' в python-3.6

Я тестирую Python 3.6. Просматривая новый код, я наткнулся на этот новый синтаксис:

f"My formatting string!"

Кажется, мы можем делать такие вещи:

>>> name = "George"
>>> print(f"My cool string is called {name}.")
My cool string is called George.

Может ли кто-нибудь пролить свет на внутреннюю работу этого? В частности, какова область видимости переменных, которые может принимать строка с префиксом f?

4b9b3361

Ответ 1

См. PEP 498 Литеральная строка Интерполяция:

Выражения, извлекаемые из строки, вычисляются в контексте, где появилась f-строка. Это означает, что выражение имеет полный доступ к локальным и глобальным переменным. Можно использовать любое допустимое выражение Python, включая вызовы функций и методов.

Итак, выражения оцениваются так, как если бы они отображались в одной и той же области; locals, closures и globals работают одинаково, как в другом коде в том же контексте.

Более подробную информацию вы найдете в справочной документации :

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

Поскольку вы пытаетесь создать альфа-версию 3.6, прочитайте What New In Python 3.6 documentation. Он суммирует все изменения, включая ссылки на соответствующую документацию и PEP.

И только для того, чтобы быть ясным: 3.6 еще не выпущен; ожидается, что первая альфа не будет выпущена до мая 2016 года. Смотрите расписание 3.6.

Ответ 2

f-строки также поддерживают любые выражения Python внутри фигурных скобок.

print(f"My cool string is called {name.upper()}.")