[Python-ideas] String formatting and namedtuple

Terry Reedy tjreedy at udel.edu
Fri Feb 13 05:29:33 CET 2009


Aahz wrote:
> On Thu, Feb 12, 2009, George Sakkis wrote:
>> On Thu, Feb 12, 2009 at 2:24 PM, Terry Reedy <tjreedy at udel.edu> wrote:
>>> PROPOSAL: Allow the simple case to stay simple.  Allow field names to be
>>> omitted for all fields in a string and then default to 0, 1, ... so that
>>> example above could be written as
>>>
>>>>>> msg = "{} == {}".format
>>> Given that computers are glorified counting machines, it *is* a bit annoying
>>> to be required to do the counting manually.  I think this is at least half
>>> the objection to switching to .format.
>> What happens when both empty and non-empty fields appear ? E.g. would
>>
>>     'I love {} with {1} and {} with {1}'.format('bacon', 'eggs', 'sausage')
>>
>> return 'I love bacon with eggs and eggs with eggs', or it would be
>> smarter and see that 1 is used explicitly and skip over it, giving 'I
>> love bacon with eggs and sausage with eggs' ?
> 
> I'd favor raising an exception.  Alternatively, we could do the
> equivalent of what % formatting does, which would be the first option
> (that is, '{#}' is considered equivalent to mapped interpolation in %
> formatting).

From

http://bugs.python.org/issue5237

"""This proposal is currently all or nothing for simplicity of 
description and presumed ease of implementation.  The patch to the doc 
could then be "If all replacement fields are left blank, then sequential 
indexes 0,1, ... will be automatically inserted." inserted after [Each 
replacement field contains either the numeric index of a positional 
argument, or the name of a keyword argument.].  Mixing blank and 
non-blank specs would then be an error and raise an exception. """

I think mixing implicit and explicit indexes would be confusing.  Mixing 
implicit indexes and keywords could perhaps work, but I won't propose 
that.  It would be a rare usage, while my goal is to make the common 
case '%s' format as easy to write as it is now, by replacing '%s' with 
'{}' [two keystrokes each].

Terry Jan Reedy






More information about the Python-ideas mailing list