Python String Formatting
Python has long had a string interpolation operator, %.
Python 2.6 and 3.0 introduced a new, richer set of string formatting operations. See PEP 3101 for the rationale.
One trick that I liked with the old way of formatting was to put the locals() dictionary or self.__dict__ on the right-hand side
>>> def stuff(a, b):
... c = a+b; d = a-b
... return "%(a)s, %(b)s, %(c)s, %(d)s" % locals()
...
>>> stuff(3, 17)
'3, 17, 20, -14'
It took me a few minutes to figure out how to do the equivalent with string.format: use the ** syntax to unpack the dict into kwargs.
>>> class Person(object):
... def __init__(self, name, age):
... self.name = name
... self.age = age
... def old(self):
... return "name=%(name)s, age=%(age)d" % self.__dict__
... def new(self):
... return "name={name}, age={age}".format(**self.__dict__)
... def dict(self):
... return "name={0[name]}, age={0[age]}".format(self.__dict__)
...
>>> gb = Person('George Burns', 100)
>>> gb.old()
'name=George Burns, age=100'
>>> gb.new()
'name=George Burns, age=100'
>>> gb.dict()
'name=George Burns, age=100'
The getitem variant ({0[name]}) might be slightly more efficient, since the dict does not need to be flattened, but I doubt it makes a perceptible difference in practice.