Inserting values into strings#

f-strings#

In Brisk Python, we claimed that Python f-strings are the usual best way to insert variable values into strings.

The example there was:

shepherd_name = "Mary"
flock_size = 92
f"Shepherd {shepherd_name} is on duty with {flock_size} sheep."
'Shepherd Mary is on duty with 92 sheep.'

There are a couple of other ways you can do the same thing, that may be useful in particular circumstances.

String format method#

You can use the string method format method to create new strings with inserted values. Here we insert a string into another string:

"Shepherd {} is on duty.".format(shepherd_name)
'Shepherd Mary is on duty.'

The empty curly braces show where the inserted value should go. shepherd_name is the argument to the format method, and tells Python which value to insert.

You can insert more than one value. As for f-strings, the values do not have to be strings, they can be numbers and other Python objects.

"Shepherd {} is on duty with {} sheep.".format(shepherd_name, flock_size)
'Shepherd Mary is on duty with 92 sheep.'
"Here is a {} floating point number".format(3.33333)
'Here is a 3.33333 floating point number'

You can do more complex formatting of numbers and strings using formatting options within the curly brackets — { and }. See the documentation on curly brace string formatting.

The same formatting rules apply to f-strings.

This system allows us to give formatting instructions for things like numbers, by using a : inside the curly braces, followed by the formatting instructions. Here we ask to print in integer (d) where the number should be prepended with 0 to fill up the field width of 3:

"Number {:03d} is here.".format(11)
'Number 011 is here.'

This prints a floating point value (specified by the f after the : in the string) with exactly 4 digits after the decimal point:

'A formatted number - {:.4f}'.format(0.213)
'A formatted number - 0.2130'

See the Python string formatting documentation linked above for more details and examples.

% formatting#

This is the oldest way of doing string interpolation, and you will rarely find a use for it. Here you use the % operator to tell Python the values to put into the string. Just for a quick example, to replicate the example at the top of the page, you could also use:

"Shepherd %s is on duty with %d sheep." % (shepherd_name, flock_size)
'Shepherd Mary is on duty with 92 sheep.'

The %s tells Python you want to insert the first value at that point, and it should be treated as a string (the s in %s). The %d tells Python the second value should be treated as an integer.

As we’ve said, you’ll rarely have need for this % syntax, but you will see it in older code, and rarely, in special cases for recent code.