% can either take a variable or a tuple. So you'd have to be very explicit about what you want it to do. For example, if you try formatting such that −
my_tuple = (1, 2, 3) "My tuple: %s" % my_tuple You'd expect it to give the output: My tuple: (1, 2, 3)
But it will throw a TypeError. To guarantee that it always prints, you'd need to provide it as a single argument tuple as follows −
"hi there %s" % (name,) # supply the single argument as a single-item tuple
Remembering such caveats every time is not that easy and may cause bugs. .format doesn't have those issues. format is also very clean looking comparatively.