On Thu, May 10, 2018 at 11:13 PM, Facundo Batista <facundobati...@gmail.com> 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 Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/