Summary: in this tutorial, you’ll learn about Python F-strings and how to use them to format strings and make your code more readable.
Introduction to the Python F-strings
Python 3.6 introduced the f-strings that allow you to format text strings faster and more elegant. The f-strings provide a way to embed variables and expressions inside a string literal using a clearer syntax than the format()
method.
For example:
name = 'John'
s = f'Hello, {name}!'
print(s)
Code language: Python (python)
Output:
Hello, John!
Code language: Python (python)
How it works.
- First, define a variable with the value
'John'
. - Then, place the
name
variable inside the curly braces{}
in the literal string. Note that you need to prefix the string with the letterf
to indicate that it is an f-string. It’s also valid if you use the letter in uppercase (F
). - Third, print out the string s.
It’s important to note that Python evaluates the expressions in f-string at runtime. It replaces the expressions inside an f-string with their values.
Python f-string examples
The following example calls the upper() method to convert the name to uppercase inside the curly braces of an f-string:
name = 'John'
s = F'Hello, {name.upper()}!'
print(s)
Code language: Python (python)
Output:
Hello, JOHN!
Code language: Python (python)
The following example uses multiple curly braces inside an f-string:
first_name = 'John'
last_name = 'Doe'
s = F'Hello, {first_name} {last_name}!'
print(s)
Code language: Python (python)
Output:
Hello, John Doe!
Code language: Python (python)
This example is equivalent to the above example but uses the join()
method:
first_name = 'John'
last_name = 'Doe'
s = F'Hello, {" ".join((first_name, last_name))}!'
print(s)
Code language: Python (python)
Output:
Hello, John Doe!
Code language: Python (python)
Multiline f-strings
Python allows you to have multiline f-strings. To create a multiline f-string, you place the letter f
in each line. For example:
name = 'John'
website = 'PythonTutorial.net'
message = (
f'Hello {name}. '
f"You're learning Python at {website}."
)
print(message)
Code language: Python (python)
Output:
Hello John. You're learning Python on PythonTutorial.net.
Code language: Python (python)
If you want to spread an f-string over multiple lines, you can use a backslash (\) to escape the return character like this:
name = 'John'
website = 'PythonTutorial.net'
message = f'Hello {name}. ' \
f"You're learning Python at {website}."
print(message)
Code language: Python (python)
The following example shows how to use triple quotes ("""
) with an f-string:
name = 'John'
website = 'PythonTutorial.net'
message = f"""Hello {name}.
You're learning Python at {website}."""
print(message)
Code language: Python (python)
Output:
Hello John.
You're learning Python at PythonTutorial.net.
Code language: Python (python)
Curly braces
When evaluating an f-string, Python replaces double curly braces with a single curly brace. However, the doubled curly braces do not signify the start of an expression.
Python will not evaluate the expression inside the double curly brace and replace the double curly braces with a single one. For example:
s = f'{{1+2}}'
print(s)
Code language: Python (python)
Output:
{1+2}
Code language: Python (python)
The following shows an f-string with triple curly braces:
s = f'{{{1+2}}}'
print(s)
Code language: Python (python)
Output:
{3}
Code language: Python (python)
In this example, Python evaluates the {1+2}
as an expression, which returns 3. Also, it replaces the remaining doubled curly braces with a single one.
To add more curly braces to the result string, you use more than triple curly braces:
s = f'{{{{1+2}}}}'
print(s)
Code language: Python (python)
Output:
{{1+2}}
Code language: Python (python)
In this example, Python replaces each pair of doubled curly braces with a single curly brace.
The evaluation order of expressions in Python f-strings
Python evaluates the expressions in an f-string in the left-to-right order. This is obvious if the expressions have side effects like the following example:
def inc(numbers, value):
numbers[0] += value
return numbers[0]
numbers = [0]
s = f'{inc(numbers,1)},{inc(numbers,2)}'
print(s)
Code language: Python (python)
Output:
1,3
Code language: Python (python)
In this example, the following function call increases the first number in the numbers list by one:
inc(numbers,1)
Code language: Python (python)
After this call, the numbers[0]
is one. And the second call increases the first number in the numbers list by 2, which results in 3.
Format numbers using f-strings
The following example use a f-string to format an integer as hexadecimal:
number = 16
s = f'{number:x}'
print(s) # 10
Code language: PHP (php)
The following example uses the f-string to format a number as a scientific notation:
number = 0.01
s = f'{number:e}'
print(s) # 1.000000e-02
Code language: PHP (php)
If you want to pad zeros at the beginning of the number, you use the f-string format as follows:
number = 200
s = f'{number: 06}'
print(s) # 00200
Code language: PHP (php)
The 06 is the total number of the result numeric string including the leading zeros.
To specify the number of decimal places, you can also use the f-string:
number = 9.98567
s = f'{number: .2f}'
print(s) # 9.99
Code language: PHP (php)
Note that the f-string also performs rounding in this case.
If the number is too large, you can use the number separator to make it easier to read:
number = 400000000000
s = f'{number: ,}' # also can use _
print(s) # 400,000,000,000
Code language: PHP (php)
To format a number as a percentage, you use the following f-string format:
number = 0.1259
s = f'{number: .2%}'
print(s) # 12.59%
s = f'{number: .1%}'
print(s) # 12.5%
Code language: PHP (php)
Python has more sophisticated format rules that you can reference via the following link.
Summary
- Python f-strings provide an elegant way to format text strings.
- Python replaces the result of an expression embedded inside the curly braces
{}
in an f-string at runtime.