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
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With