[Python-ideas] Custom format() proposal redux

Eric Smith eric at trueblade.com
Thu Apr 9 01:15:47 CEST 2009

My general thought is that I like the mechanism Mark uses to get the 
parameters into the __format__ function (the conventions dict). I'm just 
not sure where it needs to be specified in order to get the data into 

>     format(x, '8.1f', DEBUG)
>     format(y, '8d', EXTERN)
> The dictionaries can be registered for use with the mini-formatting 
> language:
>    locale.setlocale(locale.LC_ALL, 'en_US')
>    str.format.register(US=locale.localeconv())
>    str.format.register(HY=dict(thousands_sep='-'))

I'm not sure you want to use the word "register", as we might want to 
register other things in the future. Maybe "register_convention"? I 
realize it's a little long.

Also, I don't like the **kwargs functionality here, why not specify it 
as 2 parameters?
str.format.register_convention('HY', dict(thousands_sep='-'))

>    'Nigerian President will forward {0:,d!US} to your 
> account'.format(10000000)
>    format(y, ',d!HY')
>    format(z, ',d!US')

What happens if both a "conventions" parameter and a 
"!<registered-convention>" specifier are present? An error? Does one 
win? Are they merged?

What happens if you specify a convention that's not registered?

I'm not sure I like using the "!<registered-convention>" syntax. I think 
it means you couldn't have both a "!s" or "!r" and a "!<convention>" in 
the same format string, unless we allow "!s!HY". OTOH, "!s" and "!r" 
always yield strings, and I can't see how strings would need a 
convention, since they don't really do much formatting. But I haven't 
given that part much thought, and I don't have a counter-proposal.

Using "!" also means we should probably require that conventions not be 
named "s" or "r", and we might want to reserve all single character 
lower case strings.

A larger concern is libraries. If I'm a library author, there's no way I 
can know what conventions the application has registered. And even if I 
could inspect them, I'm not sure what I'd do with the knowledge. I 
either would have to register my own private conventions (like 
"libraryname.HY"), or we'd need to agree on conventions we're expecting 
to be available and what they mean. What are your thoughts on what a 
library author should do?


More information about the Python-ideas mailing list