My initial feeling is that concatenation might take longer than substitution, but that it is also easier to read: def p(self, paragraph): self.source += '<p>' + paragraph + '</p>\n\n' vs. def p(self, paragraph): self.source += '<p>%s</p>\n\n' % paragraph Is there a preference between these two ways?