Sign in
Log inSign up

String formatting: % vs. .format vs. string literal

sairamuppugundla's photo
sairamuppugundla
·Sep 1, 2020·

2 min read

Python 2.6 introduced the str.format() method with a slightly different syntax from the existing % operator. Which is better and for what situations?

Python 3.6 has now introduced another string formatting format of string literals (aka "f" strings) via the syntax f"my string". Is this formatting option better than the others?

The following uses each method and has the same outcome, so what is the difference?

#!/usr/bin/python sub1 = "python string!" sub2 = "an arg"

sub_a = "i am a %s" % sub1 sub_b = "i am a {0}".format(sub1) sub_c = f"i am a {sub1}"

arg_a = "with %(kwarg)s!" % {'kwarg':sub2} arg_b = "with {kwarg}!".format(kwarg=sub2) arg_c = f"with {sub2}!"

print(sub_a) # "i am a python string!" print(sub_b) # "i am a python string!" print(sub_c) # "i am a python string!"

print(arg_a) # "with an arg!" print(arg_b) # "with an arg!" print(arg_c) # "with an arg!" Furthermore when does string formatting occur in Python? For example, if my logging level is set to HIGH will I still take a hit for performing the following % operation? And if so, is there a way to avoid this?

log.debug("some debug info: %s" % some_info)