Python String Formatting

String formatting in Python allows you to inject variables into strings in a readable and flexible way. This guide covers different string formatting techniques, including f-strings, the format() method, and the older %-style formatting.

1. f-Strings (Python 3.6+)

f-strings, or formatted string literals, are the most modern and convenient way to format strings in Python. You can embed expressions inside curly braces {}, and they will be evaluated at runtime.

# Using f-strings
name = "Alice"
age = 30

formatted_string = f"My name is {name} and I am {age} years old."
print(formatted_string)  # Output: My name is Alice and I am 30 years old.

Try It Now

Advantages: f-strings are concise, readable, and support any valid Python expression.

Example with Expressions:

# Using expressions inside f-strings
x = 5
y = 10

result = f"The sum of {x} and {y} is {x + y}."
print(result)  # Output: The sum of 5 and 10 is 15.

Try It Now

2. format() Method

The format() method allows you to insert variables into placeholders marked by curly braces {}. It provides more control over formatting options.

# Using format() method
name = "Bob"
age = 40

formatted_string = "My name is {} and I am {} years old.".format(name, age)
print(formatted_string)  # Output: My name is Bob and I am 40 years old.

Try It Now

Positional and Keyword Arguments:

# Positional arguments
formatted_string = "I have {0} apples and {1} oranges.".format(5, 3)
print(formatted_string)  # Output: I have 5 apples and 3 oranges.

# Keyword arguments
formatted_string = "My name is {name} and I live in {city}.".format(name="Charlie", city="Paris")
print(formatted_string)  # Output: My name is Charlie and I live in Paris.

Try It Now

Formatting Numbers:

# Formatting numbers
pi = 3.14159265358979
formatted_pi = "Pi rounded to 2 decimal places: {:.2f}".format(pi)
print(formatted_pi)  # Output: Pi rounded to 2 decimal places: 3.14

Try It Now

3. % Formatting (Old Style)

This older style of string formatting uses the % operator to insert values into a string. While still supported, it is less commonly used in modern Python code.

# Using % formatting
name = "David"
age = 35

formatted_string = "My name is %s and I am %d years old." % (name, age)
print(formatted_string)  # Output: My name is David and I am 35 years old.

Try It Now

Formatting Numbers with %:

# Formatting numbers with %
pi = 3.14159
formatted_pi = "Pi rounded to 2 decimal places: %.2f" % pi
print(formatted_pi)  # Output: Pi rounded to 2 decimal places: 3.14

Try It Now

4. Template Strings (from the string Module)

Template strings offer another way to format strings using placeholders marked by $. They are simpler and more secure for certain applications, such as user-generated input.

from string import Template

template = Template("My name is $name and I am $age years old.")
formatted_string = template.substitute(name="Eve", age=28)

print(formatted_string)  # Output: My name is Eve and I am 28 years old.

Try It Now

Comparison of String Formatting Methods

Method Introduced in Advantages Disadvantages
f-strings Python 3.6 Concise, readable, supports expressions Not available in Python versions below 3.6
format() Python 2.7 and 3.0+ Flexible, supports positional and keyword arguments More verbose than f-strings
% Formatting Python 2.x Simple for basic formatting Limited flexibility, less readable
Template Strings Python 2.4 Safe for user-generated input Less powerful for complex expressions

Conclusion

Python provides multiple ways to format strings, each with its own strengths. For modern Python code, f-strings are the recommended approach due to their readability and performance.