Comparing Performance for all 4 ways of string formatting
title = 'Mr.'
name = 'Tom'
count = 3
%timeit 'Hello {title} {name}! You have {count} messages.'.format(title=title, name=name, count=count)
198 ns ± 7.88 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit 'Hello {} {}! You have {} messages.'.format(title, name, count)
329 ns ± 7.04 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit 'Hello %s %s! You have %d messages.'%(title, name, count)
264 ns ± 6.95 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit f'Hello {title} {name}! You have {count} messages.'
12.1 ns ± 0.0936 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each)
So the latest way of string formatting is from python3.6 is fastest also.