How do I use Python to easily expand variables to strings?

Lionel picture Lionel · Jan 30, 2011 · Viewed 17.5k times · Source

What's a nice idiom to do this:

Instead of: print "%s is a %s %s that %s" % (name, adjective, noun, verb)

I want to be able to do something to the effect of: print "{name} is a {adjective} {noun} that {verb}"

Answer

user395760 picture user395760 · Jan 30, 2011
"{name} is a {adjective} {noun} that {verb}".format(**locals())
  • locals() gives a reference to the current namespace (as a dictionary).
  • **locals() unpacks that dictionary into keyword arguments (f(**{'a': 0, 'b': 1}) is f(a=0, b=1)).
  • .format() is "the new string formatting", which can by the way do a lot more (e.g. {0.name} for the name attribute of the first positional argument).

Alternatively, string.template (again, with locals if you want to avoid a redundant {'name': name, ...} dict literal).