杰瑞科技汇

Python 3.4 format方法怎么用?

Python 3.4 字符串格式化完全指南:从基础到精通 (format方法详解)

** 还在用 号拼接字符串?Python 3.4 的 format() 方法让你写出更优雅、更高效的代码!本文带你彻底掌握 str.format() 的所有用法。

Python 3.4 format方法怎么用?-图1
(图片来源网络,侵删)

(Meta Description)

本文详细讲解 Python 3.4 中强大的字符串格式化工具 str.format() 方法,从基础的占位符使用,到高级的格式化选项(如数字格式、对齐、填充等),再到与 f-string 的对比,助你彻底理解并灵活运用 format 方法,告别繁琐的字符串拼接,提升代码可读性与专业度。


引言:告别 号,拥抱优雅的字符串格式化

在 Python 编程中,将变量嵌入到字符串中是一项非常常见的操作,对于许多初学者来说,最直观的方法就是使用 号进行字符串拼接。

name = "Alice"
age = 30
print("My name is " + name + " and I am " + str(age) + " years old.")

虽然这种方法可行,但当你需要拼接的变量很多时,代码会变得冗长、可读性差,并且容易因为类型不匹配而出错(比如忘记将数字转换为字符串)。

从 Python 2.6 开始,str.format() 方法应运而生,并在 Python 3.4 中得到了广泛应用和完善,它提供了一种更清晰、更灵活、更强大的字符串格式化方式,本文将深入探讨 Python 3.4 中 str.format() 的方方面面,让你彻底掌握这个利器。

Python 3.4 format方法怎么用?-图2
(图片来源网络,侵删)

初识 format():基础用法

format() 方法是字符串对象的一个方法,它通过 和 中的占位符来替换变量。

核心语法: "模板字符串 {}".format(替换值)

1 最简单的替换

是最简单的占位符,它会按照顺序被 format() 方法中的参数依次替换。

Python 3.4 format方法怎么用?-图3
(图片来源网络,侵删)
# 示例 1: 基础替换
s = "Hello, {}!"
print(s.format("World"))  # 输出: Hello, World!
# 示例 2: 多个参数
s = "Hello, {}. You are {} years old."
print(s.format("Bob", 25))  # 输出: Hello, Bob. You are 25 years old.

2 通过索引指定位置

你可以在 中使用数字索引(从 0 开始),来指定使用 format() 方法中哪个位置的参数,这种方式可以让你不按顺序地替换变量。

s = "{1} is {0} years old, and his name is {1}."
print(s.format(30, "Charlie"))  # 输出: Charlie is 30 years old, and his name is Charlie.

3 通过关键字指定位置

使用关键字参数(keyword arguments)可以让你的代码更具可读性,特别是当参数较多时。

s = "Hello, {name}. Your balance is {balance:.2f} dollars."
print(s.format(name="David", balance=123.4567))
# 输出: Hello, David. Your balance is 123.46 dollars.

注意: {balance:.2f} 是一个进阶用法,我们将在后面详细解释。


进阶格式化:强大的格式化规范

format() 方法的真正威力在于其强大的格式化规范,语法为 format_spec,放在占位符的冒号后面。

通用格式:{field_name:format_spec}

format_spec 本身又可以细分为多个部分,我们来逐一拆解。

1 数字格式化

这是最常用的场景之一,可以控制数字的显示方式、精度、对齐等。

  • 浮点数精度控制 (f) 使用 f 来格式化浮点数,并通过 指定小数点后的位数。

    pi = 3.141592653589793
    print("Pi is approximately {:.2f}".format(pi))
    # 输出: Pi is approximately 3.14
    print("Pi is approximately {:.4f}".format(pi))
    # 输出: Pi is approximately 3.1416
  • 科学计数法 (eE) 使用 eE 将数字转换为科学计数法。

    large_num = 123456789
    print("Large number: {:.2e}".format(large_num))
    # 输出: Large number: 1.23e+08
    print("Large number: {:.2E}".format(large_num))
    # 输出: Large number: 1.23E+08
  • 千位分隔符 (_ 或 ) 使用 _ 或 来为整数或浮点数添加千位分隔符,增强可读性。

    money = 1000000
    print("The prize is: {:,}".format(money))
    # 输出: The prize is: 1,000,000
    print("The prize is: {:_}".format(money))
    # 输出: The prize is: 1_000_000
  • 百分比 () 使用 将数字转换为百分比格式,它会自动乘以 100。

    percentage = 0.85
    print("Completion rate: {:.1%}".format(percentage))
    # 输出: Completion rate: 85.0%
  • 整数格式化 (d, b, o, x) 可以将整数转换为不同的进制。

    num = 255
    print("Decimal: {:d}".format(num))    # 十进制
    # 输出: Decimal: 255
    print("Binary: {:b}".format(num))     # 二进制
    # 输出: Binary: 11111111
    print("Octal: {:o}".format(num))      # 八进制
    # 输出: Octal: 377
    print("Hexadecimal: {:x}".format(num)) # 小写十六进制
    # 输出: Hexadecimal: ff
    print("Hexadecimal: {:X}".format(num)) # 大写十六进制
    # 输出: Hexadecimal: FF

2 字符串格式化

  • 截断 () 使用 后跟数字来限制字符串的最大长度。

    long_text = "This is a very long sentence that we want to truncate."
    print("{:.20}".format(long_text))
    # 输出: This is a very long sent
  • 填充和对齐 (<, >, ^, ) 这是非常实用的功能,可以让你轻松创建对齐的表格或报告。

    • <:左对齐
    • >:右对齐(默认)
    • ^:居中对齐
    • 对于数字,将符号放在填充字符之后、数字之前。

    需要配合一个填充字符使用(通常是空格,但可以是任何字符)。

    s = "{:<10}".format("left")     # 左对齐,宽度为10
    print(repr(s))                  # 输出: 'left      '
    s = "{:>10}".format("right")    # 右对齐,宽度为10
    print(repr(s))                  # 输出: '     right'
    s = "{:^10}".format("center")   # 居中对齐,宽度为10
    print(repr(s))                  # 输出: '  center  '
    s = "{:=+10}".format(-123)     # 数字对齐,符号在前
    print(repr(s))                  # 输出: '     -123'
    s = "{:*^10}".format("center")  # 使用 '*' 作为填充字符
    print(repr(s))                  # 输出: '**center**'

处理复杂数据结构

format() 方法同样可以处理列表、字典等复杂数据结构。

1 格式化列表或元组

通过索引访问列表或元组中的元素。

data = ["Alice", 30, "Engineer"]
s = "Name: {0[0]}, Age: {0[1]}, Job: {0[2]}"
print(s.format(data))
# 输出: Name: Alice, Age: 30, Job: Engineer

2 格式化字典

通过键名访问字典中的值。

person = {"name": "Eve", "age": 28}
s = "Name: {person[name]}, Age: {person[age]}"
print(s.format(person=person))
# 输出: Name: Eve, Age: 28

format()f-string (Python 3.6+) 的对比

作为 Python 3.4 的用户,你可能已经听说过 Python 3.6 引入的 f-string(格式化字符串字面量),这是一个更简洁、更快速的语法。

f-string 示例:

name = "Frank"
age = 40
# f-string 写法
s = f"Hello, {name}. You are {age} years old."
print(s)

对比分析:

特性 str.format() (Python 3.4) f-string (Python 3.6+)
语法 "Hello {}".format(name) f"Hello {name}"
可读性 良好,但模板和变量分离 极佳,变量直接嵌入,一目了然
性能 较好 更快,在性能敏感场景下更优
灵活性 极高,支持复杂数据结构、索引、关键字等 极高,直接支持表达式 f"{2+2}"
兼容性 Python 2.6+ Python 3.6+
  • 如果你仍在使用 Python 3.4 或更早版本str.format() 是你进行字符串格式化的首选和标准方式,它功能强大且稳定。
  • 如果你已经升级到 Python 3.6+,f-string 是更现代、更推荐的选择,代码更简洁高效。

实战应用:生成格式化报告

让我们通过一个综合示例,来感受 format() 方法的强大。

目标: 生成一个简单的用户信息报告。

# --- 数据 ---
users = [
    {"name": "Victor", "id": 101, "balance": 543.21, "status": "Active"},
    {"name": "Wendy", "id": 102, "balance": 9876.54, "status": "Inactive"},
    {"name": "Xander", "id": 103, "balance": 12.99, "status": "Active"},
]
# --- 报告模板 ---
report_header = "{:^80}".format("=== USER ACCOUNT REPORT ===")
report_header += "\n{:<20} {:<10} {:<15} {:<10}".format("Name", "ID", "Balance", "Status")
report_separator = "-" * 80
# --- 生成报告 ---
print(report_header)
print(report_separator)
for user in users:
    # 使用 format 动态生成每一行
    # 名字左对齐,ID右对齐,Balance右对齐并格式化为货币,Status居中
    line = (
        "{:<20} "
        "{:>10} "
        "{:>15,.2f} "
        "{:^10}"
    ).format(
        user["name"],
        user["id"],
        user["balance"],
        user["status"]
    )
    print(line)
print(report_separator)
print("{:^80}".format("Report End"))

输出结果:

                    === USER ACCOUNT REPORT ===                   
Name                 ID          Balance        Status    
--------------------------------------------------------------------------------
Victor               101         543.21        Active    
Wendy                102         9,876.54      Inactive  
Xander               103           12.99        Active    
--------------------------------------------------------------------------------
                         Report End                         

这个例子完美展示了 format() 在创建结构化文本时的能力,远比用 拼接来得优雅和可控。


本文系统地介绍了 Python 3.4 中 str.format() 方法的核心用法和高级技巧,从基础的变量替换,到数字、字符串的精细化格式化,再到处理复杂数据结构和实战应用,我们一步步揭示了 format() 作为 Python 字符串格式化基石的强大之处。

虽然 Python 3.6+ 的 f-string 提供了更现代的语法,但 str.format() 的兼容性和强大功能使其在任何 Python 3.4 及以上版本中都是一项不可或缺的技能,掌握它,不仅能让你写出更专业、更易读的 Python 代码,也是你作为一名程序员扎实基本功的体现,就尝试用 format() 重写你之前的字符串拼接代码吧!

分享:
扫描分享到社交APP
上一篇
下一篇