当前位置: 首页 > news >正文

Python 的字符串格式化方法

        在 Python 中,格式化字符串是一种常见的操作,用于将变量或数据嵌入到字符串中,使其更具可读性和灵活性。Python 提供了多种字符串格式化方法,包括传统的 % 格式化、str.format() 方法以及现代的 f-string(格式化字符串字面量)。以下是这些方法的详细介绍和使用示例:

1. % 格式化(旧式格式化)

% 格式化是 Python 最早的字符串格式化方法,使用 % 符号作为占位符,并通过 % 操作符将值插入到字符串中

语法
"%格式化符" % 值

说明:字符串后直接+%值。

示例
name = "Alice"
age = 30
message = "Hello, %s! You are %d years old." % (name, age)
print(message)
# 输出:Hello, Alice! You are 30 years old.

说明:这里是将name插入到%s所在的位置,将age插入到%d所在的位置,顺序是对应的。

常见格式化符
  • %s:字符串

  • %d:整数

  • %f:浮点数

  • %.2f:保留两位小数的浮点数

  • %x:十六进制

  • %o:八进制


2. str.format() 方法

str.format() 是一种更灵活的格式化方法,使用 { } 作为占位符,并通过 .format() 方法将值插入到字符串中

语法
"{} {}".format(value1, value2)
示例
name = "Alice"
age = 30
message = "Hello, {}! You are {} years old.".format(name, age)
print(message)
# 输出:Hello, Alice! You are 30 years old.

说明:这里是将name插入到第一个{ }所在的位置,将age插入到第二个{ }所在的位置,顺序是对应的,跟前面%格式化一样。

高级用法
  • 指定索引

    message = "Hello, {0}! You are {1} years old. Nice to meet you, {0}.".format(name, age)
    print(message)
    # 输出:Hello, Alice! You are 30 years old. Nice to meet you, Alice.

说明:这里可以使用索引,后面括号中的变量按顺序建立索引,如name的索引为0,age的索引为1,所以在前面{ }占位符中,可以不用顺序对应后面的变量(引用的次数和位置都没有限制),而是按照索引值来读取。

  • 格式化数字

    pi = 3.1415926
    message = "The value of pi is {:.2f}".format(pi)
    print(message)
    # 输出:The value of pi is 3.14

说明:将pi按.2f格式输出,即保留两位小数。

  • 字典格式化

    data = {"name": "Alice", "age": 30}
    message = "Hello, {name}! You are {age} years old.".format(**data)
    print(message)
    # 输出:Hello, Alice! You are 30 years old.

说明:data是一个字典,每一个元素包含了“字段名:字段值”,可以根据字段名读取字段值。

3. f-string(格式化字符串字面量)

f-string 是 Python 3.6 引入的一种新的字符串格式化方法,使用 f""F"" 表示格式化字符串,并通过 {} 直接嵌入表达式。f-string 是目前推荐的格式化方法,因为它更简洁、更高效。

语法
f"Hello, {变量}! You are {表达式}."
示例
name = "Alice"
age = 30
message = f"Hello, {name}! You are {age} years old."
print(message)
# 输出:Hello, Alice! You are 30 years old.
高级用法
  • 表达式支持

    message = f"Next year, {name} will be {age + 1} years old."
    print(message)
    # 输出:Next year, Alice will be 31 years old.

说明:可以在占位符中嵌入表达式,如age+1。

  • 格式化数字

    pi = 3.1415926
    message = f"The value of pi is {pi:.2f}"
    print(message)
    # 输出:The value of pi is 3.14
  • 多行字符串

    message = (
        f"Name: {name}\n"
        f"Age: {age}\n"
        f"Next year: {age + 1}"
    )
    print(message)
    # 输出:
    # Name: Alice
    # Age: 30
    # Next year: 31

4. 格式化表格

在数据处理中,格式化表格是一个常见的需求。可以使用 str.format() 或 f-string 来实现。

示例
data = [
    {"name": "Alice", "age": 30, "score": 85.5},
    {"name": "Bob", "age": 25, "score": 90.0},
    {"name": "Charlie", "age": 35, "score": 78.5}
]

print(f"{'Name':<10} {'Age':<5} {'Score':<6}")
print("-" * 25)
for item in data:
    print(f"{item['name']:<10} {item['age']:<5} {item['score']:<6.2f}")
输出
Name       Age   Score 
-------------------------
Alice      30    85.50 
Bob        25    90.00 
Charlie    35    78.50 

5. 格式化日期和时间

Python 的 datetime 模块提供了丰富的日期和时间格式化功能,可以通过 strftime() 方法或 f-string 来实现。

示例
from datetime import datetime

now = datetime.now()
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_date)
# 输出:2025-10-10 12:34:56

# 使用 f-string
print(f"Current time: {now:%Y-%m-%d %H:%M:%S}")
# 输出:Current time: 2025-10-10 12:34:56

总结

Python 提供了多种字符串格式化方法,各有优缺点:

  • % 格式化:简单但不够灵活,逐渐被淘汰。

  • str.format():灵活且功能强大,适合复杂场景。

  • f-string:简洁高效,推荐在 Python 3.6+ 中使用。

在实际开发中,建议优先使用 f-string,因为它不仅语法简洁,而且性能更好。

相关文章:

  • 编程助手学Python--Deepseek对OpenAI的Python库调用GPT-4模型生成对话回复理解
  • docker 常用命令大全(二),docker 镜像操作 ,持续更新
  • 仅仅使用pytorch来手撕transformer架构(1):位置编码的类的实现和向前传播
  • 系统架构设计师知识小科普:系统架构评估
  • 【文献阅读】SPRec:用自我博弈打破大语言模型推荐的“同质化”困境
  • Linux上位机开发实战(qt编译之谜)
  • vue 仿deepseek前端开发一个对话界面
  • 3分钟复现 Manus 超强开源项目 OpenManus
  • 使用netlify部署github的vue/react项目或本地的dist,国内也可以正常访问
  • 人工智能混合编程实践:Python ONNX进行图像超分重建
  • PyTorch 和 Python关系
  • 先进制造aps专题三十一 免费企业高级计划和优化(Advanced Planning and Optimizer)产品FreeAPO简介
  • ELK traceId实现跨服务日志追踪
  • 【MySQL】MySQL程序解析
  • Leetcode 95-不同的二叉搜索树 II
  • Python----计算机视觉处理(opencv:像素,RGB颜色,图像的存储,opencv安装,代码展示)
  • 当量子计算遇上互联网安全:挑战与革新之路
  • Java 序列化和反序列化为什么要实现Serializable接口
  • Redis存数据就像存钱:RDB定期存款 vs AOF实时记账
  • 计算机视觉图像点运算【灰度直方图均衡化图形界面实操理解 +开源代码】
  • OpenAI任命了一位新CEO
  • 视频|漫画家寂地:古老丝路上的文化与交流留下的独特印记
  • 全球第七个迪士尼主题公园将落户阿布扎比
  • 蓝佛安:中方将采取更加积极有为的宏观政策,有信心实现2025年的5%左右增长目标
  • 马斯克的胜利?OpenAI迫于压力放弃营利性转型计划
  • 创历史同期新高!“五一”假期全国快递揽投超48亿件