Legacy Percentage Formatting
The modulo operator provides a classic approach to embedding values within template strings. Placeholders like %s for strings and %d for integers are substituted using a tuple on the right side of the % character.
cpu_threads = 16
memory_mb = 8192
print("Server Specs: Threads=%d, Memory=%d MB" % (cpu_threads, memory_mb))
Object-Oriented Formatting with .format()
The str.format() method encapsulates formatting logic within the string itself, offering greater flexibility through positional indexing and named placeholders.
account_id = 4829
balance = 1250.75
# Positional references
print("Account [{0}] Current Balance: ${1}".format(account_id, balance))
# Named references via keyword arguments
print("UID: {aid}, Status: {bal}".format(aid=account_id, bal=balance))
Inline Expressions with F-Strings
Introduced in Python 3.6, formatted string literals streamline syntax by allowing direct variable interpolation inside braces prefixed with f or F. This reduces overhead and improves readability compared to previous methods.
sensor_label = "Thermal Probe A"
reading_celsius = 68.249
print(f"{sensor_label}: Reading {reading_celsius}°C")
Precision Control and Alignment
Both .format() and f-strings support colons inside curly braces to define type converters, width specifications, alignment directives, and padding characters.
Numeric Precision
Use .nf where n dictates decimal places for floating-point numbers.
tax_rate = 0.0825
base_price = 49.99
print(f"Applied Rate: {tax_rate:.2%}")
print("Total Cost: ${:.2f}".format(base_price * (1 + tax_rate)))
Spacing and Padding
Aligment flags <, >, and ^ control text positioning within a defined field width. Addisional characters can serve as fillers.
department_code = "FIN"
employee_id = 73
# Left-align code, right-align ID, fill with hyphens
print("{:-<10} | {:>5d}".format(department_code, employee_id))
# Zero-pad integers to fixed width
print("{:06d}".format(employee_id))
Stream Control Arguments
The built-in print() function accepts auxiliary parameters to manipulate how arguments are joined and terminated.
sep: Defines the delimiter between multiple arguments (default is a single space).end: Sets the terminating string appended after the last argument (default is).
tags = ["security", "network", "deploy"]
print(*tags, sep=" // ")
progress_label = "[Phase 1]"
print(progress_label, end=" ")
print("Initializing subsystems...")
print("Ready.\n", end="")
Comprehensive Reporting Workflow
Combining these techniques enables dynamic log generation, financial summaries, or dashboard outputs without manual concatenation.
item = "Laser Module"
stock_level = 42
unit_cost = 155.00
# Modern f-string with embedded calculations and formatting
print(f"Stock Alert: {item.upper()} | Qty: {stock_level:>3} | Value: ${unit_cost * stock_level:<.2f}")
# Compatibility fallback using old-style syntax
print("Alert: %s | Count: %03d | Est.: $%.2f" % (item, stock_level, unit_cost * stock_level))
# Dynamic layout construction
row_template = "{{:<20}} {:>8} {:>10}"
print(row_template.format(item.ljust(20), str(stock_level).rjust(8), f"${unit_cost:.2f}"))