Guido van Rossum wrote:
On Thu, Feb 12, 2009 at 10:29 AM, David Borowitz <ddborowitz@gmail.com> wrote:
Can't roughly the same thing be achieved with % substitution?
msg = '%s == %s' print(msg % ('.format', 'improvement')) .format == improvement msg % ('Python', 'greatness') 'Python == greatness'
The main non-syntactic difference here is that msg is a normal string object rather than a bound method.
Not arguing against moving to .format, just that it doesn't seem inherently more powerful than % in this case. (I guess you could still argue that this pattern alleviates a concern with .format, namely repeated typing of .format, but that's never been an issue with % to begin with.)
It has the classic issue that % always has: if there's a single %s in the format string it will do the wrong thing when the argument is a tuple.
s = "[%s]" mystery_object = () s % mystery_object Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: not enough arguments for format string
Using bound methods was, to me, a lesser point of my post. I still am curious what anyone thinks of 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. Terry Jan Reedy