首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 字符串格式化

Python 字符串格式化

作者头像
小田测测看
发布2026-06-17 17:01:55
发布2026-06-17 17:01:55
2020
举报

1. 三种格式化方式对比

特性

% 操作符

str.format()

f-string (Python 3.6+)

可读性

灵活性

性能

表达式支持

有限

变量名重复使用

对齐/填充

有限支持

类型转换

有限支持

日期格式化

单独处理

单独处理

内联支持


2. % 操作符

代码语言:javascript
复制
name = "拾光"
age = 18

# 基本用法
print("Hello, %s!" % name)  # Hello, Alice!
print("%s is %d years old" % (name, age))

# 格式化选项
print("%10s" % name)      # 右对齐: '     拾光'
print("%-10s" % name)     # 左对齐: '拾光     '
print("%.2f" % 3.14159)   # 浮点数精度: '3.14'

# 字典格式化
print("%(name)s: %(age)d" % {"name": name, "age": age})

3. str.format()

代码语言:javascript
复制
# 位置参数
print("{} is {} years old".format(name, age))

# 命名参数
print("{name} works as {job}".format(name="Bob", job="engineer"))

# 索引重用
print("{0} {1} {0}".format("a", "b"))  # a b a

# 格式化选项
print("{:.2f}".format(3.14159))      # 3.14
print("{:>10}".format(name))         # 右对齐: '     拾光'
print("{:<10}".format(name))         # 左对齐: '拾光     '
print("{:^10}".format(name))         # 居中: '  拾光   '
print("{:,}".format(1000000))        # 千分位: 1,000,000

# 类型转换
print("{!r}".format("text"))         # 调用repr(): 'text'

4. f-string 🚀

基础用法
代码语言:javascript
复制
# 变量直接嵌入
print(f"{name} is {age} years old")

# 表达式计算
print(f"Next year {name} will be {age + 1}")

# 调用函数
print(f"Name uppercase: {name.upper()}")

# 多行f-string
message = (
    f"User: {name}\n"
    f"Age: {age}\n"
    f"Status: {'Adult' if age >= 18 else 'Minor'}"
)
高级格式化
代码语言:javascript
复制
# 数字格式化
pi = 3.1415926
print(f"Pi: {pi:.3f}")              # Pi: 3.142
print(f"Hex: {255:#x}")             # Hex: 0xff

# 对齐与填充
print(f"{name:>15}")                # 右对齐: '         拾光'
print(f"{name:*<10}")               # 左填充: '拾光*****'

# 日期格式化
from datetime import datetime
now = datetime.now()
print(f"Today: {now:%Y-%m-%d %H:%M}")  # Today: 2025-06-17 12:30

# 原始字符串 (处理特殊字符)
path = r"d:\folder"
print(fr"Path: {path}")             # Path: d:\folder

# 字典操作
user = {"name": "Alice", "age": 30}
print(f"{user['name']}: {user['age']}")
嵌套使用
代码语言:javascript
复制
# 在format规范中嵌套变量
width = 10
precision = 3
print(f"{pi:{width}.{precision}f}") # '     3.142'

# 条件表达式
count = 5
print(f"You have {count} item{'s' if count != 1 else ''}")


5. 最佳实践

1. 复杂格式化场景

代码语言:javascript
复制
# 复杂逻辑预处理
discount_rate = 0.15 if is_member else 0.05
total = price * quantity * (1 - discount_rate)
print(f"Final price: {total:.2f}")

2. SQL/Shell 命令:使用 f-string 但要防注入

代码语言:javascript
复制
# 危险!可能SQL注入
query = f"SELECT * FROM users WHERE name = '{name}'"

# 安全做法
query = "SELECT * FROM users WHERE name = %s"
cursor.execute(query, (name,))

7. 常见问题解决

问题:大括号字面量如何显示?

代码语言:javascript
复制
print(f"{{}} = braces")  # {} = braces

问题:浮点数精度问题

代码语言:javascript
复制
num = 0.1 + 0.2
print(f"{num:.1f}")      # 0.3 (显示修正)
print(f"{num}")          # 0.30000000000000004

问题:调试快速查看变量

代码语言:javascript
复制
x = 42
print(f"{x = }")         # x = 42 (Python 3.8+)

问题:格式化None值

代码语言:javascript
复制
value = None
print(f"Value: {value or 'N/A'}")  # Value: N/A

问题:超长数字可读性

代码语言:javascript
复制
big_num = 10**9
print(f"{big_num:,}")    # 1,000,000,000
print(f"{big_num:_}")    # 1_000_000_000

掌握 f-string 能让你的 Python 代码更简洁、高效、可读

#Python

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程拾光 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 三种格式化方式对比
  • 2. % 操作符
  • 3. str.format()
  • 4. f-string 🚀
    • 基础用法
    • 高级格式化
    • 嵌套使用
  • 5. 最佳实践
  • 7. 常见问题解决
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档