[Python-Dev] Format factories (was Re: sWAPcASE Was: transform() and untransform() methods, and the codec registry) (original) (raw)

Nick Coghlan ncoghlan at gmail.com
Fri Dec 10 01:26:09 CET 2010


On Fri, Dec 10, 2010 at 9:29 AM, Antoine Pitrou <solipsis at pitrou.net> wrote:

On Thu, 09 Dec 2010 18:10:38 -0500 Eric Smith <eric at trueblade.com> wrote:

If we're looking to reduce the number of methods on str, I wouldn't mind seeing center() and zfill() also go away, since they're trivially replaced by format(). Well, it's only trivial when you know format()'s wicked mini-language by heart :/  center() is easy and obvious. zfill() is arguably a bit too specialized.

I've occasionally wondered if string formatting [1] and the struct module [2] would benefit from format building functions that made them easier to use without necessarily learning the cryptic mini-languages off by heart.

For example, a "string.make_format_spec" function might have a signature like:

def make_format_spec(fill=None, align=None, sign=None, width=None, precision=None, display_type='s', alternate=False, commas=False, numeric_case=None)

"align" would accept not only the actual format symbols ('<', '>', '=', '^'), but also the corresponding names ('left', 'right', 'numeric', 'center').

"numeric_case" would accept None, 'upper' or 'lower' (affecting the formatting of hex and floating point values). If the stated numeric case differs from that specified by the display type, raise a ValueError. For an unspecified numeric case, the affected display types would default to 'lower'.

Similarly, "display_type" would accept long names in addition to the character codes:

's': 'str' 'b': 'binary' 'c': 'chr' 'd': 'int' 'o': 'octal' 'x', 'X': 'hex' (numeric case controls display of digits A-F) 'n': 'locale' 'e', 'E': 'exponent' (numeric case controls display of exponent as well as infinite and NaN values) 'f', 'F': 'float' (numeric case controls display of exponent as well as infinite and NaN values) 'g', 'G': 'general' (numeric case controls display of exponent as well as infinite and NaN values) '%': 'percent' (numeric case controls display of exponent as well as infinite and NaN values)

There could also be a corresponding parse_format_spec that produced a named tuple with the appropriate details.

Cheers, Nick.

[1] http://docs.python.org/dev/library/string#format-specification-mini-language [2] http://docs.python.org/dev/library/struct#format-strings

-- Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia



More information about the Python-Dev mailing list