[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