[Python-ideas] String formatting and namedtuple
spir
denis.spir at free.fr
Fri Feb 13 10:03:59 CET 2009
Le Thu, 12 Feb 2009 23:29:33 -0500,
Terry Reedy <tjreedy at udel.edu> a écrit :
> 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
Agree with the base {} proposal. Not really with forbidding mixing:
A side-advantage is that this principle is consistent with the tuple/dict opposition: tuple items are implicitely numbered.
Note that this is even more analog to positional vs keyword function arguments. So that there is probably no need to forbid {} and {name} in the same format string, as long as names came after positionally identified sub-strings. We need instead a rule stating that empty {} come first and that names comply with the common identifier pattern, in order to avoid conflicts with implicit indexes.
Denis
------
la vida e estranya
More information about the Python-ideas
mailing list