[Python-3000] Format specifier proposal

Andrew James Wade andrew.j.wade at gmail.com
Wed Aug 15 06:42:04 CEST 2007


On 2007年8月14日 21:12:32 -0500
Ron Adam <rrr at ronadam.com> wrote:
>>> Greg Ewing wrote:
> > Guido van Rossum wrote:
> >> On 8/13/07, Andrew James Wade <andrew.j.wade at gmail.com> wrote:
> >>
> >>> On 2007年8月13日 20:53:26 -0700
> >>> "Guido van Rossum" <guido at python.org> wrote:
> > 
> >>>> I propose that their
> >>>> __format__ be defined like this:
> >>>>
> >>>> def __format__(self, spec):
> >>>> return self.strftime(spec)
> >>> You loose the ability to align the field then.
> > 
> > This might be a use case for the chaining of format specs
> > that Ron mentioned. Suppose you could do
> > 
> > "{{1:spec1}:spec2}".format(x)
> > 
> > which would be equivalent to
> > 
> > format(format(x, "spec1"), "spec2")

That would be a solution to my concerns, though that would have to be:
 "{ {1:spec1}:spec2}"
>>> 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.
-- Andrew


More information about the Python-3000 mailing list

AltStyle によって変換されたページ (->オリジナル) /