This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Improve `=` in f-strings
Type: enhancement Stage: resolved
Components: Interpreter Core Versions: Python 3.10
process
Status: closed Resolution: rejected
Dependencies: Superseder:
Assigned To: Nosy List: eric.smith, serhiy.storchaka, wyz23x2
Priority: normal Keywords:

Created on 2021-04-01 12:25 by wyz23x2, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Messages (6)
msg389979 - (view) Author: wyz23x2 (wyz23x2) * Date: 2021-04-01 12:25
In Python 3.8, `=` was added into f-strings:
>>> a, b, c = 20, 40, 10
>>> f'{a+b-c=}'
a+b-c=50
But if `20+40-10` is wanted, this needs to be written:
>>> f'{a}+{b}-{c}={a+b-c}'
20+40-10=50
So something could be added. For example, `?` (this doesn't mean I recommend the question mark):
>>> f'{a?+b?-c?=}'
20+40-10=50
>>> f'{a+b?-c=}'
a+40-c=50
>>> f'{a+b-c=?}'  # Suffix `=` to apply to all?
20+40-10

Suggestions?
msg389980 - (view) Author: wyz23x2 (wyz23x2) * Date: 2021-04-01 12:28
Well, it's:
>>> f'{a+b-c=?}'  # Suffix `=` to apply to all?
20+40-10=50


P.S. When will the bug tracker enable message editing?
msg389984 - (view) Author: Eric V. Smith (eric.smith) * (Python committer) Date: 2021-04-01 13:59
I don't see how this would be possible in general. What would you do with a function call that has side effects?

f'{a()+b+c=}'

?

You'd end up calling a() twice, or inventing your own expression evaluator.
msg389986 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2021-04-01 14:15
I think it goes too far. It was initially designed as a simple for implementation and use feature which covers a large amount of use cases of using f-strings for debugging. You propose to add syntactically a new postfix operator which is valid only in "="-substisutions in f-strings, with complex semantic. It would be difficult to implement, and it would significantly complicate Python grammar. Also it will prevent using ? for other purposes in Python expressions in future.
msg390018 - (view) Author: Eric V. Smith (eric.smith) * (Python committer) Date: 2021-04-01 23:44
I'm going to close this. I agree with Serhiy that it's pushing f-strings too far.

If you really want to pursue this, you'll need to specify the semantics much more clearly, and then bring it up on the python-ideas mailing list. But I don't want to give you false hope: I really don't think we'd ever accept this, given how complex it would be.

That said, thanks for making me think about how this would work!
msg390041 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2021-04-02 06:00
I think there is a slim chance of implementing similar feature in future. If once we implement pytest-like asserts, we will need to add special expression evaluator which saves all intermediate results of subexpressions and pass them to some hook (together with string representation of subexpressions). The same evaluator with different hook could be used for "="-substitutions in f-strings. So {a+b-c=} could be evaluated to "a=20, b=40, a+b=60, c=10, a+b-c=50". But it is too early to talk about it.
History
Date User Action Args
2022-04-11 14:59:43adminsetgithub: 87861
2021-04-02 06:00:17serhiy.storchakasetmessages: + msg390041
2021-04-01 23:44:46eric.smithsetstatus: open -> closed
resolution: rejected
messages: + msg390018

stage: resolved
2021-04-01 14:15:17serhiy.storchakasetnosy: + serhiy.storchaka
messages: + msg389986
2021-04-01 13:59:41eric.smithsetnosy: + eric.smith
messages: + msg389984
2021-04-01 12:28:04wyz23x2setmessages: + msg389980
2021-04-01 12:25:56wyz23x2create