ZetCode

Python format 函数

上次修改时间:2025 年 4 月 11 日

这篇全面的指南探讨了 Python 的 format 函数,它提供了多功能的字符串格式化功能。我们将介绍基本用法、格式规范以及文本格式化的实际示例。

基本定义

format 函数使用指定的格式代码将值格式化为字符串。它是字符串格式化方法的内置实现。

主要特点:适用于所有 Python 数据类型,支持位置参数和命名参数,并为数字、日期和自定义对象提供广泛的格式化选项。

基本字符串格式化

以下是简单的用法,展示了 format 如何使用位置和命名占位符处理不同的数据类型。

basic_format.py
# 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 函数提供了广泛的数字格式化选项,包括精度、对齐方式和不同的数字基数。

number_formatting.py
# 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 函数可以对齐文本并使用各种字符添加填充。这对于创建表格或固定宽度的输出非常有用。

alignment.py
# 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__ 方法处理它们,提供灵活的日期格式化。

datetime_formatting.py
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 类。

custom_format.py
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__ 以支持不同的温度刻度输出。 冒号后的格式说明符决定输出格式。

当您想要提供对象的多个字符串表示形式,并且可以在格式化时选择它们时,此模式很有用。

最佳实践

资料来源

作者

我的名字是 Jan Bodnar,我是一位充满热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。到目前为止,我已经撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 Python 教程