[Python-3000] PEP 3101 clarification requests

Jim Jewett jimjjewett at gmail.com
Fri Aug 17 19:27:57 CEST 2007


The PEP says:

  The general form of a standard format specifier is:

        [[fill]align][sign][width][.precision][type]

but then says:

    A zero fill character without an alignment flag
    implies an alignment type of '='.

In the above form, how can you get a fill character without an
alignment character?  And why would you want to support it; It just
makes the width look like an (old-style) octal.  (The spec already
says that you need the alignment if you use a digit other than zero.)

--------------

The explicit conversion flag is limited to "r" and "s", but I assume
that can be overridden in a Formatter subclass.  That possibility
might be worth mentioning explicitly.

--------------


    'check_unused_args' is used to implement checking
    for unused arguments ... The intersection of these two
    sets will be the set of unused args.

Huh?  I *think* the actual intent is (args union kwargs)-used.  I
can't find an intersection in there.

-----------------
    This can easily be done by overriding get_named() as follows:

I assume that should be get_value.

    class NamespaceFormatter(Formatter):
          def __init__(self, namespace={}, flags=0):
              Formatter.__init__(self, flags)

but the Formatter class took no init parameters -- should flags be
added to the Formatter constructor, or taken out of here?

The get_value override can be expressed more simply as

    def get_value(self, key, args, kwds):
        try:
            # simplify even more by assuming PEP 3135?
            super(NamespaceFormatter, self).get_value(key, args, kwds)
        except KeyError:
            return self.namespace[name]

The example usage then takes globals()...

        fmt = NamespaceFormatter(globals())
        greeting = "hello"
        print(fmt("{greeting}, world!"))

Is there now a promise that the objects returned by locals() and
globals() will be "live", so that they would reflect the new value of
"greeting", even though it was set after the Formatter was created?

-jJ


More information about the Python-3000 mailing list