2016-03-02 6 views
27

Я пытаюсь использовать Python 3.6. Проходя через новый код, я наткнулся на этот новый синтаксис:Строка с префиксом 'f' в python-3.6

f"My formatting string!" 

Кажется, что мы можем сделать что-то вроде этого:

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

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

ответ

28

См PEP 498 Literal String Interpolation:

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

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

Вы найдете более подробную информацию в reference documentation:

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

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

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

+1

ли ожидать, что F-строки будут портированные в предыдущие версии Python3 (если они находят большое использование в новом коде)? Я не могу найти ответ на это в любом случае, но это похоже на спорный вопрос. –

+0

Планируется не делать это, нет. PEP заявляет, что это новая функция для 3.6. –

+0

Спасибо. Я пытался сравнить его с PEP Enum, который был новым, но в конечном итоге был включен в предыдущие версии 3.x, и я не видел ничего, указывающего план в любом случае. –

2

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

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