[Python-3000] string.Formatter class

Eric Smith eric+python-dev at trueblade.com
Fri Aug 31 01:05:27 CEST 2007


Ron Adam wrote:
>> get_field(field_name, args, kwargs, used_args)
>> Given a field_name as returned by parse, convert it to an object to be 
>> formatted.  The default version takes strings of the form defined in 
>> the PEP, such as "0[name]" or "label.title".  It records which args 
>> have been used in used_args.  args and kwargs are as passed in to 
>> vformat.
> 
> Rather than pass the used_args set out and have it modified in a 
> different methods, I think it would be better to pass the arg_used back 
> along with the object.  That keeps all the code that is involved in 
> checking used args is in one method.  The arg_used value may be useful 
> in other ways as well.
> 
>      obj, arg_used = self.get_field(field_name, args, kwargs)
>      used_args.add(arg_used)

I'm really not wild about either solution, but I suppose yours is less 
objectionable than mine.  I'll check this change in tonight (before the 
deadline).

I think you'd have to say:

if args_used is not None:
    used_args.add(args_used)

as it's possible that the field was not derived from the args or kwargs.

> I wonder if this is splitting things up a bit too finely?  If the format 
> function takes a conversion argument, it makes it possible to do 
> everything by overriding format_field.
> 
>     def format_field(self, value, format_spec, conversion):
>         return format(value, format_spec, conversion)
> 
> 
> Adding this to Talins suggestion, the signature of format could be...
> 
>     format(value, format_spec="", conversion="")

But this conflates conversions with formatting, which the PEP takes 
pains not to do.  I'd rather leave them separate, but I'll let Talin 
make the call.

Eric.



More information about the Python-3000 mailing list