On Fri, Sep 18, 2020 at 1:38 AM Eric V. Smith <e...@trueblade.com> wrote:
>
> In general, there's no way to start with a format specifier string and
> from it get the type of the object that it should be applied to. For
> example, any string without %'s is a valid datetime format specifier (of
> dubious value, but such is life). Perhaps a better example is decimal
> vs. float. What if I want %.2f to return a decimal? Would that just not
> be possible?
>
> So I think you'd have to limit this to a small set of built-in types.
>
> In general, I think overloading f-strings as assignment targets would be
> confusing. But I've been wrong before.
>

It doesn't have to be absolutely identical, just as long as it's
mostly parallel. Consider C's printf and scanf formats; any whitespace
in scanf matches any whitespace, and the integer handlers are always
happy to accept a leading plus sign (which has to be specifically
requested in printf). Conversely, scanf can be more restrictive, eg
%[a-z] which will match some sequence of lowercase ASCII letters.

IMO printf notation (what in Python does with str % ...) is better
suited to this than Python's .format() notation (which f-strings also
use). But the advantages of f-strings would also apply here. Maybe the
best way would be the tagged version of percent formatting?

>>> x, y = 1, 2
>>> "==> (%(x)d, %(y)d)" % globals()
'==> (1, 2)'

Theory:

"==> (%(x)d, %(y)d)" = "==> (1, 2)"

could assign x=1 and y=2. (It'd want to have some sort of tag to show
what's going on, but not f"..." since it's not an f-string.)

PEP 622 pattern matching may be relevant here.

ChrisA
_______________________________________________
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/PYETEF73PH2I6SN4UBWSEVJ5MH5IYFTA/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to