$$\newcommand{L}[1]{\| #1 \|}\newcommand{VL}[1]{\L{ \vec{#1} }}\newcommand{R}[1]{\operatorname{Re}\,(#1)}\newcommand{I}[1]{\operatorname{Im}\, (#1)}$$

# Inserting values into strings¶

## Option 1 - the string format method¶

You can use the string method format method to create new strings with inserted values. This method works for all current releases of Python. Here we insert a string into another string:

>>> shepherd = "Mary"
>>> string_in_string = "Shepherd {} is on duty.".format(shepherd)
>>> print(string_in_string)
Shepherd Mary is on duty.


The curly braces show where the inserted value should go.

You can insert more than one value. The values do not have to be strings, they can be numbers and other Python objects.

>>> shepherd = "Mary"
>>> age = 32
>>> stuff_in_string = "Shepherd {} is {} years old.".format(shepherd, age)
>>> print(stuff_in_string)
Shepherd Mary is 32 years old.

>>> '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 — see the documentation on curly brace string formatting.

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:

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


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

>>> 'A formatted number - {:.4f}'.format(.2)
'A formatted number - 0.2000'


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

## Option 2 - f-strings in Python >= 3.6¶

If you can depend on having Python >= version 3.6, then you have another attractive option, which is to use the new formatted string literal (f-string) syntax to insert variable values. An f at the beginning of the string tells Python to allow any currently valid variable names as variable names within the string. For example, here is an example like the one above, using the f-string syntax:

>>> shepherd = "Martha"
>>> age = 34
>>> # Note f before first quote of string
>>> stuff_in_string = f"Shepherd {shepherd} is {age} years old."
>>> print(stuff_in_string)
Shepherd Martha is 34 years old.


## Option 3 - old school % formatting¶

There is an older method of string formatting that uses the % operator. It is a bit less flexible than the other two options, but you will still see it in use in older code, and where using % formatting is more concise.

For % operator formating, you show where the inserted values should go using a % character followed by a format specifier, to say how the value should be inserted.

Here is the example above, using % formatting. Notice the %s marker to insert a string, and the %d marker to insert an integer.

>>> stuff_in_string = "Shepherd %s is %d years old." % (shepherd, age)
>>> print(stuff_in_string)
Shepherd Martha is 34 years old.