Python format 函数
上次修改时间:2025 年 4 月 11 日
这篇全面的指南探讨了 Python 的 format 函数,它提供了多功能的字符串格式化功能。我们将介绍基本用法、格式规范以及文本格式化的实际示例。
基本定义
format 函数使用指定的格式代码将值格式化为字符串。它是字符串格式化方法的内置实现。
主要特点:适用于所有 Python 数据类型,支持位置参数和命名参数,并为数字、日期和自定义对象提供广泛的格式化选项。
基本字符串格式化
以下是简单的用法,展示了 format 如何使用位置和命名占位符处理不同的数据类型。
# Positional arguments
print(format("Hello, {}!", "world")) # Hello, world!
# Named arguments
print(format("Coordinates: {lat}, {lon}", lat="37.7749", lon="-122.4194"))
# Formatting numbers
print(format("Value: {:.2f}", 3.14159)) # Value: 3.14
# Multiple values
print(format("{} + {} = {}", 2, 3, 5)) # 2 + 3 = 5
这个例子展示了使用位置和命名参数的基本字符串格式化。格式说明符 {:.2f} 将数字四舍五入到 2 位小数。
该函数类似于字符串 format 方法,但作为独立函数调用。 当您需要动态格式化值时,它很有用。
数字格式化
format 函数提供了广泛的数字格式化选项,包括精度、对齐方式和不同的数字基数。
# Floating point precision
print(format("Pi: {:.4f}", 3.1415926535)) # Pi: 3.1416
# Percentage
print(format("Completion: {:.1%}", 0.756)) # Completion: 75.6%
# Hexadecimal
print(format("Hex: 0x{:X}", 255)) # Hex: 0xFF
# Thousands separator
print(format("Population: {:,}", 1000000)) # Population: 1,000,000
# Scientific notation
print(format("Distance: {:.2e} km", 149600000)) # Distance: 1.50e+08 km
这些示例演示了各种数字格式化选项。冒号后的格式规范控制值的显示方式。
请注意,X 产生大写十六进制,而 x 将产生小写十六进制。 逗号根据语言环境添加千位分隔符。
对齐和填充
format 函数可以对齐文本并使用各种字符添加填充。这对于创建表格或固定宽度的输出非常有用。
# Right alignment
print(format("{:>10}", "right")) # ' right'
# Center alignment
print(format("{:^10}", "center")) # ' center '
# Left alignment
print(format("{:<10}", "left")) # 'left '
# Custom padding
print(format("{:*^20}", "title")) # '*******title********'
# Number alignment
print(format("{:=10}", -42)) # '- 42'
这些例子展示了不同的文本对齐选项。 >、^ 和 < 符号分别控制右对齐、居中对齐和左对齐。
填充字符可以在对齐符号之前指定。 = 对齐将数字的符号放在最左侧。
日期和时间格式化
format 函数通过 datetime 对象的 __format__ 方法处理它们,提供灵活的日期格式化。
from datetime import datetime
now = datetime.now()
# Standard date formats
print(format("Today is {:%Y-%m-%d}", now))
print(format("Time: {:%H:%M:%S}", now))
# Custom formats
print(format("Day of year: {:%j}", now))
print(format("Week number: {:%U}", now))
print(format("AM/PM: {:%p}", now))
这演示了使用格式代码的 datetime 格式化。冒号后面的代码与 strftime 中使用的代码相同。
format 函数委托给 datetime 的 __format__ 方法,该方法解释这些格式代码以生成所需的输出。
自定义对象格式化
您可以通过实现 __format__ 特殊方法,使自定义对象与 format 一起使用。 此示例创建一个 Temperature 类。
class Temperature:
def __init__(self, celsius):
self.celsius = celsius
def __format__(self, format_spec):
if format_spec == 'F':
return f"{self.celsius * 9/5 + 32:.1f}°F"
elif format_spec == 'K':
return f"{self.celsius + 273.15:.1f}K"
else:
return f"{self.celsius:.1f}°C"
temp = Temperature(25)
print(format("Temperature: {}", temp)) # 25.0°C
print(format("Temperature: {:F}", temp)) # 77.0°F
print(format("Temperature: {:K}", temp)) # 298.1K
Temperature 类实现 __format__ 以支持不同的温度刻度输出。 冒号后的格式说明符决定输出格式。
当您想要提供对象的多个字符串表示形式,并且可以在格式化时选择它们时,此模式很有用。
最佳实践
- 对于简单情况,使用 f-strings: 在 Python 3.6+ 中,首选 f-strings 以提高可读性
- 实现 __format__: 对于需要格式化的自定义对象
- 文档格式代码: 清楚地记录支持的格式规范
- 考虑本地化: 对数字/日期使用区域设置感知格式
- 重用格式字符串: 将复杂的格式字符串存储为常量
资料来源
作者
列出所有 Python 教程。