Skip to main content
`Ctrl`+`K`

# String Formatting

## The `format` Method

String objects have a `format` method. This method allows for converting numbers and other data to strings.

    a = 4
    b = 5
    c = a + b
    nice_string = 'The result of {} plus {} is {}.'.format(a, b, c)
    print(nice_string)

    The result of 4 plus 5 is 9.

Calling the `format` method of a string replaces all pairs `{}` by the arguments passed to the format method. Next to integers also floats and strings can be passed to `format`. The original string is not modified because it’s immutable. Instead, `format` returns a new string object.

The arguments of `format` can also be accessed by providing their index: the first argument has index 0, the second has index 1, and so on.

    a = 4
    b = a + a
    print('The result of {0} plus {0} is {1}.'.format(a, b))

    The result of 4 plus 4 is 8.

For more complex output (or more readable code) keyword arguments can be passed to format.

    print('Mister {name} is {age} years old.'.format(name='Muller', age='42'))

    Mister Muller is 42 years old.

Converting numbers to strings sometimes requires additional parameters: How many digits to use for floats? Shall numbers in several lines be aligned horizontally? There is a whole ‘mini language’ for writing formatting options. Here we provide only some examples. For details see Python documentation on format string syntax.

    # print integer as float with 2 decimal places
    print('The result is {:.2f}.'.format(3))

    # right-align integers in fixed-width area
    print('number of apples:  {:3d}'.format(2))
    print('number of oranges: {:3d}'.format(145))

    # same works for floats and strings
    print('percentage of apples:  {:7.2f}'.format(2.1234))
    print('percentage of oranges: {:7.2f}'.format(80.8976455))
    print('percentage of bananas: {:7}'.format('unknown'))

    The result is 3.00.
    number of apples:    2
    number of oranges: 145
    percentage of apples:     2.12
    percentage of oranges:   80.90
    percentage of bananas: unknown

If indices or names are used for refering to `format`’s arguments, they have to be placed on the left-hand side of the collon: `{name:3.2f}`.

## Formatted String Literals (f-Strings)

Starting with version 3.6 of Python there is a more comfortable way to format strings. It’s very similar to formatting via `format` method, but requires less code and increases readability. The two major differences are:

- string literals have to be prefixed by `f`,

- the curly braces may contain a Python expression (an object name, for instance).

    a = 123
    print(f'Here you see {a}.')

    b = 4.56789
    print(f'Formatting works as above: {b:.2f} is a rounded float.')

    Here you see 123.
    Formatting works as above: 4.57 is a rounded float.

For details see formatted string literals in the Python documentation.