On 5/26/2021 7:07 AM, Chris Angelico wrote:
Either way, it would be a string. The difference is that string
literals can be placed adjacent to each other:

"{1}" f' - {1+2=} - ' '{2}'
'{1} - 1+2=3 - {2}'

Which goes to show, btw, that an f-string is still a literal, even
though it's not a constant.

Again unrelated to the topic at hand, but I think it's interesting to see what's going on behind the scenes:

>>> dis.dis("'{1}' f' - {1+2=} - ' '{2}'")
  1           0 LOAD_CONST               0 ('{1} - 1+2=')
              2 LOAD_CONST               1 (3)
              4 FORMAT_VALUE             2 (repr)
              6 LOAD_CONST               2 (' - {2}')
              8 BUILD_STRING             3
             10 RETURN_VALUE

The 1+2 expression is replaced by 3 by some optimizer step. Regular strings and the literal part of f-strings are merged by the f-string "compiler".

I keep forgetting about this behavior. I usually start doubling the braces, but this auto-concatenation is probably a better idea.

Eric

_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/IGUTSS7ADRA45RK4VVVZIIDWAVP47U6N/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to