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)
%
style more often, because if you do not need the improved capabilities of theformat()
style, the%
style is often a lot more convenient. – Lutz Precheltformat()
formatting style and the older%
-based formatting style. – Lutz Prechelt