On Thu, May 10, 2018 at 11:13 PM, Facundo Batista
<[email protected]> wrote:
>> I would like to see you flesh out the idea. In particular, I'd like to see
>> you
>> address cases where:
>> 1. The underlying members in the collection are not strings. Besides the
>> basic
>> types such as numbers, it would also be nice to be able to apply formats
>> recursively so that one can construct a string using the attributes of
>> members that are objects or items or other collections.
>
> I didn't think about this at the time. I have the feeling (not really
> well thought yet) that "recursive formatting" will complicate
> everything too much, that doing str() (as {} defaults to) on every
> object would fulfill most of the basic cases and keep this simple.
>
>
>> 2. The ability to handle collections other than simple lists or iterables,
>> such
>> as dictionaries.
>
> Ideally, it will handle *any* iterable.
If it's to handle arbitrary iterables, it can't be the normal style of
"take this string, pass it to the object's __format__ method, and let
it interpret it". That's why I suggested a bang notation instead. We
have some already:
>>> x = "O'Really?"
>>> print(f"!s: {x!s} !r: {x!r}")
!s: O'Really? !r: "O'Really?"
Those markers apply to ANY object, and pass it through str() or repr()
respectively, before using any provided format string. A "!j" flag
could take an iterable, format each element using the given format,
and then join them. The letter "j" makes good sense then, as it
parallels str.join() - this would be broadly similar to
"...".join(format(...) for x in iter).
ChrisA
_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/