Le Thu, 12 Feb 2009 23:29:33 -0500, Terry Reedy <tjreedy@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@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