Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why are double curly braces used instead of backslash in python f-strings?

We usually use the backslash to escape illegal characters.

For example, escaping the double quotes.

>>> "\"" == '"'
True

In f-strings, curly braces are used for placeholding. To represent a curly brace, the braces are doubled.

For example,

>>> f"{{}}" == "{}"
True

Why was this intuitive approach not favored when developing f-strings? Is there some technical or design reason?

>>> f'\{\}'
  File "<stdin>", line 1
SyntaxError: f-string expression part cannot include a backslash
like image 283
fizzybear Avatar asked Aug 12 '20 23:08

fizzybear


Video Answer


2 Answers

I believe that PEP 536 (Final Grammar for Literal String Interpolation) speaks to this point: https://www.python.org/dev/peps/pep-0536/

A short snippet from the Motivation section of the PEP is "The current implementation of f-strings in CPython relies on the existing string parsing machinery and a post processing of its tokens. This results in several restrictions to the possible expressions usable within f-strings: "

For additional information refer to this linked email.

like image 89
jsmart Avatar answered Oct 23 '22 21:10

jsmart


jsmart's answer sounds nice, but the existing f-string implementation could fairly easily have been written to use \{ and \} instead of {{ and }}. The limitations PEP 536 would have addressed are different, like the inability to use ' inside an expression portion of an f-string if ' was used to delimit the f-string itself.

It's more likely that f-strings use {{ and }} not because \{ and \} would have been hard to implement, but because str.format was already using {{ and }} to represent literal braces when f-strings were introduced, and the f-string syntax was based on str.format's syntax. Using {{ and }} makes it easier to transition between str.format and f-strings. There was no compelling reason to change the existing notation.

like image 44
user2357112 supports Monica Avatar answered Oct 23 '22 19:10

user2357112 supports Monica