Guido van Rossum wrote:
It is true that the advantages of .format() are probably more appreciated when you are writing a larger program.
True. I think that the auto-number feature goes a little way in helping replace casual uses of %-formatting. To that end, I've implemented a string.Formatter subclass that mostly implements this suggestion, just so people can try it out if they want. I believe it's complete, except it doesn't handle escaping '{' and '}'. It's attached to http://bugs.python.org/issue5237 as auto_number_formatter_3.py. $ ./python Python 2.7a0 (trunk:69608, Feb 14 2009, 04:51:18) [GCC 4.1.2 20070626 (Red Hat 4.1.2-13)] on linux2 Type "help", "copyright", "credits" or "license" for more information.
from auto_number_formatter_3 import formatter as _ _('{} {} {}').format(3, 'pi', 3.14) '3 pi 3.14'
It also lets you add in format specifiers, conversion specifiers, and object access. Once you use those, the improvement of leaving out the index numbers is less clear. I'll leave it for debate if this is useful. I think it probably is, if only because it's easier to explain the behavior: If you leave out the 'field name', a sequential number is added in front of the 'replacement string' (using PEP 3101 nomenclature).
_('{} {} {}').format(3, 'pi', 3.14) '3 pi 3.14' _('{:#b} {!r:^16} {.imag}').format(3, set([14,3]), 3j+1) '0b11 set([3, 14]) 3.0'
It also supports all of the regular ''.format() behavior, you just can't mix-and-match using field names and omitting them.
_('{foo:10}').format(foo='bar') 'bar ' _('{0} {}').format(1, 2) Traceback (most recent call last): ... <details omitted for clarity> ValueError: cannot mix and match auto indexing
As I said, pure-Python example doesn't handle escaping '{' and '}' (because the parsing is tedious and already implemented in the C version), but is otherwise complete. If the consensus is that this is useful, I'll implement it in ''.format(), otherwise I'm done with this issue. Eric. PS: Just as a plug, I should note this is the first use I've found for the under-appreciated string.Formatter.