[Python-ideas] Customizing format()

Steven D'Aprano steve at pearwood.info
Wed Mar 18 12:45:11 CET 2009

On Wed, 18 Mar 2009 11:25:42 am Raymond Hettinger wrote:
> Mark Dickinson's test code suggested a good, extensible approach to
> the problem.  Here's the idea in a nutshell:
>   format(value, format_spec='', conventions=None)
>      'calls value.__format__(format_spec, conventions)'

For what was supposed to be a nice, simple way of formatting numbers, it 
sure became confusing. So thank you for the nutshell.

I like this idea, especially if it means we can simplify the 
format_spec. Can we have the format_spec in a nutshell too?

> Where conventions is an optional dictionary with formatting control
> values.  Any value object can accept custom controls, but the names
> for standard ones would be taken from the standards provided by
> localeconv():
>   {
>    'decimal_point': '.',
>    'grouping': [3, 0],
>    'negative_sign': '-',
>    'positive_sign': '',
>    'thousands_sep': ','}

Presumably we value compatibility with localeconv()? If not, then 
perhaps a better name for 'thousands_sep' is 'group_sep', on account 
that if you group by something other than 3 it won't represent 

Would this allow you to format a float like this?

1,234,567.89012 34567 89012

(group by threes for the integer part, and by fives for the fractional 
part). Or is that out-of-scope for this proposal?

+1 for a conventions dict. Good plan!

Steven D'Aprano

More information about the Python-ideas mailing list