[Python-3000] Format specifier proposal
Adam Olsen
rhamph at gmail.com
Wed Aug 15 19:20:27 CEST 2007
On 8/15/07, Ron Adam <rrr at ronadam.com> wrote:
>
>
> Andrew James Wade wrote:
> > On Tue, 14 Aug 2007 21:12:32 -0500
> > Ron Adam <rrr at ronadam.com> wrote:
>
> >> What I was thinking of was just a simple left to right evaluation order.
> >>
> >> "{0:spec1, spec2, ... }".format(x)
> >>
> >> I don't expect this will ever get very long.
> >
> > The first __format__ will return a str, so chains longer than 2 don't
> > make a lot of sense. And the delimiter character should be allowed in
> > spec1; limiting the length of the chain to 2 allows that without escaping:
> >
> > "{0:spec1-with-embedded-comma,}".format(x)
> >
> > My scheme did the same sort of thing with spec1 and spec2 reversed.
> > Your order makes more intuitive sense; I chose my order because I
> > wanted the syntax to be a generalization of formatting strings.
> >
> > Handling the chaining within the __format__ methods should be all of
> > two lines of boilerplate per method.
>
> I went ahead and tried this out and it actually cleared up some difficulty
> in organizing the parsing code. That was a very nice surprise. :)
>
> (actual doctest)
>
> >>> import time
> >>> class GetTime(object):
> ... def __init__(self, time=time.gmtime()):
> ... self.time = time
> ... def __format__(self, spec):
> ... return fstr(time.strftime(spec, self.time))
>
> >>> start = GetTime(time.gmtime(1187154773.0085449))
>
> >>> fstr("Start: {0:%d/%m/%Y %H:%M:%S,<30}").format(start)
> 'Start: 15/08/2007 05:12:53 '
Caveat: some date formats include a comma. I think the only
workaround would be splitting them into separate formats (and using
the input date twice).
--
Adam Olsen, aka Rhamphoryncus
More information about the Python-3000
mailing list