杰瑞科技汇

Python format字符串怎么用?

在 Python 中,格式化字符串主要有三种方式:

  1. 百分号 () 格式化 (旧式,不推荐在新代码中使用)
  2. str.format() 方法 (较新,功能强大,灵活)
  3. f-strings (格式化字符串字面量) (Python 3.6+ 推荐,最简洁、最直观、性能最好)

下面我将详细介绍这三种方法,并重点推荐使用 f-strings。


百分号 () 格式化 (旧式方法)

这是 Python 早期版本中使用的字符串格式化方法,类似于 C 语言中的 printf

基本语法: "格式化字符串" % (变量1, 变量2, ...)

格式化标记:

  • %s: 字符串
  • %d: 十进制整数
  • %f: 浮点数
  • %x: 十六进制整数
  • 输出百分号本身

示例:

name = "Alice"
age = 30
score = 95.5
# 基本格式化
print("My name is %s." % name)  # 输出: My name is Alice.
print("I am %d years old." % age)  # 输出: I am 30 years old.
# 格式化浮点数,保留两位小数
print("My score is %.2f." % score)  # 输出: My score is 95.50.
# 格式化多个变量
print("My name is %s, I am %d years old, and my score is %.2f." % (name, age, score))
# 输出: My name is Alice, I am 30 years old, and my score is 95.50.
# 使用字典格式化
person = {'name': 'Bob', 'age': 25}
print("Name: %(name)s, Age: %(age)d" % person)
# 输出: Name: Bob, Age: 25

缺点:

  • 当变量很多时,括号里的列表会变得很长,难以阅读。
  • 对于非基本数据类型(如列表、元组),语法容易出错。
  • 功能相对有限。

str.format() 方法 (Python 2.6+)

这是一种更现代、更灵活的字符串格式化方法,通过 和 来指定插入的位置和格式。

基本语法: "格式化字符串 {}".format(变量1, 变量2, ...)

核心概念:

  • 一个空的占位符,按顺序填充后面的变量。
  • {0}, {1}, {2}: 带索引的占位符,{0} 对应第一个变量,{1} 对应第二个,以此类推。
  • {name}: 命名占位符,需要通过关键字参数来提供值。

示例:

name = "Charlie"
age = 35
score = 88.0
# 基本用法,按顺序填充
print("My name is {}.".format(name))  # 输出: My name is Charlie.
print("I am {} years old.".format(age))  # 输出: I am 35 years old.
# 使用索引
print("{1} is {0} years old.".format(age, name))
# 输出: Charlie is 35 years old.
# 使用关键字参数
print("Hello, {name}. You are {age} years old.".format(name="David", age=40))
# 输出: Hello, David. You are 40 years old.
# 格式化数字
print("The value of pi is approximately {:.2f}.".format(3.14159))
# 输出: The value of pi is approximately 3.14.
# 格式化百分比
print("Percentage: {:.0%}".format(0.75)) # 输出: Percentage: 75%
# 格式化填充和对齐
print("Left aligned: |{:<10}|".format("test"))  # 左对齐,宽度为10
# 输出: Left aligned: |test      |
print("Right aligned: |{:>10}|".format("test")) # 右对齐,宽度为10
# 输出: Right aligned: |     test|
print("Center aligned: |{:^10}|".format("test")) # 居中对齐,宽度为10
# 输出: Center aligned: |  test   |
# 使用字典
person = {'name': 'Eve', 'age': 28}
print("Name: {name}, Age: {age}".format(**person))
# 输出: Name: Eve, Age: 28

优点:

  • 可读性比 格式化好得多。
  • 功能强大,支持命名参数、复杂的格式化选项(对齐、填充、精度等)。
  • 可以重用同一个变量。

f-strings (格式化字符串字面量) (Python 3.6+)

这是目前最推荐的方式,它将表达式直接嵌入到字符串字面量中,语法非常简洁直观。

基本语法: f"前缀{表达式1}后缀{表达式2}..."

核心概念:

  • 在字符串前加上 fF 前缀。
  • 在 中直接写入 Python 表达式(变量、函数调用、数学运算等)。
  • 表达式会被求值,并将结果转换为字符串插入到原位置。

示例:

name = "Frank"
age = 45
score = 99.9
# 基本用法,直接嵌入变量
print(f"My name is {name}.")  # 输出: My name is Frank.
print(f"I am {age} years old.")  # 输出: I am 45 years old.
# 在 f-string 中进行计算和调用函数
def greet(name):
    return f"Hello, {name}!"
print(f"{greet(name)} Your score is {score * 2}.")
# 输出: Hello, Frank! Your score is 199.8.
# 格式化数字
pi = 3.14159
print(f"The value of pi is approximately {pi:.2f}.")
# 输出: The value of pi is approximately 3.14.
# 格式化百分比
percentage = 0.85
print(f"Percentage: {percentage:.0%}")
# 输出: Percentage: 85%
# 格式化填充和对齐
print(f"Left aligned: |{name:<10}|") # 左对齐,宽度为10
# 输出: Left aligned: |Frank     |
print(f"Right aligned: |{name:>10}|") # 右对齐,宽度为10
# 输出: Right aligned: |     Frank|
print(f"Center aligned: |{name:^10}|") # 居中对齐,宽度为10
# 输出: Center aligned: |  Frank   |
# 使用字典
person = {'name': 'Grace', 'age': 32}
print(f"Name: {person['name']}, Age: {person['age']}")
# 输出: Name: Grace, Age: 32
# 使用对象属性
class User:
    def __init__(self, name, age):
        self.name = name
        self.age = age
user = User("Heidi", 50)
print(f"User's name is {user.name} and age is {user.age}.")
# 输出: User's name is Heidi and age is 50.

优点:

  • 语法最简洁、最易读,代码看起来非常自然。
  • 性能最好,f-string 在编译时被求值,比 str.format() 和 都快。
  • 功能强大,可以包含任意有效的 Python 表达式。
  • 是 Python 的官方推荐用法。

总结与对比

特性 百分号 () str.format() f-strings
语法 "text %s" % var "text {}".format(var) f"text {var}"
可读性 较差 良好 极佳
性能 较慢 中等 最快
功能 基础 强大 非常强大
Python 版本 所有版本 6+ 6+
推荐度 不推荐 可用 强烈推荐

最佳实践

除非你需要在 Python 3.6 以下的版本中运行代码,否则请始终优先使用 f-strings。

它们是现代 Python 编程中处理字符串格式化的标准方式,兼具了简洁性、可读性和高性能。

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