Formatted Strings

Formatted Strings#

RealPython Reference
Python docs Reference

%-formatting (old)#

This style of formatted print is old and not recommended. But, you may see it somewhere. The % acts like a “escape sequence” similar to how it is done in Java’s System.out.printf.

The string literal is the format string. After the string literal the arguments to the string is separated by %. I find this odd. Apparently, so did many other programmers which is why this formatting isn’t used very much these days.

print("Hello, %s. You are %s." % (name, adjective))

format method#

There is a method named format on the string object. The string contains formatting information inside of curly braces. This formatting is described below. The string can contain many curly braces and other text to be printed.

Once again, this method of formatting strings is not used very much these days.

n = 2.154327
format_float = "{:.2f}".format(n)
print(format_float)

print("text {0}".format('value'))

f-string#

This is the most recent and popular way to format a string and values. Python’s string formatting functionality is built into Python’s f-string. The API is a bit complicated to understand. It is similar to the way Java implements printf, only it has different escape sequences and specifics. In short, when a string literal is preceded with 'f' then the string is expecting to have some formatting sequence in it. A formatting sequence is embedded inside curly braces {} and the text inside the curly braces is interpreted. It would contain identifiers, method calls, and possibly formatting options following a colon. Here is the syntax for printing a floating point number with some text label:

f'text{<identifer>:.<integer>f}'

For example, let’s say we do the following:

gpa = 3.899
print(f'GPA={gpa:.2f}')

That code results in printing, GPA=3.90 (due to rounding to 2 decimal places).

There are lots and lots of options that you can find in Python docs Reference.

Examples#

n = 30
print(f'Hex     = {n:05x}')
print(f'Decimal = {n:5d}')
print(f'SciNota = {n:e}')
print(f'Percent = {n:%}')

# assume foo()=8
from math import sqrt
print(f'Foo = {foo()} and squirt 2 = {sqrt(2):.3f}')

Output:

Hex     = 0001e
Decimal =    30
Sci Not = 3.000000e+01
Percent = 3000.000000%
Foo = 8 and squirt 2 = 1.414