[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