python格式化字符串

一、旧式格式化(% 操作符)

  1. 这是 Python 早期的格式化方式,灵感来源于 C 语言的 printf,支持所有 Python 版本,但功能相对有限。

  2. 使用 % 作为占位符,搭配元组 / 字典传递参数,常见占位符有 %s(字符串)、%d(整数)、%f(浮点数)等。

    python 复制代码
    # 基础用法(元组传参)
    name = "小明"
    age = 20
    print("姓名:%s,年龄:%d" % (name, age))  # 输出:姓名:小明,年龄:20
    
    # 浮点数格式化(保留2位小数)
    score = 98.567
    print("成绩:%.2f" % score)  # 输出:成绩:98.57
    
    # 字典传参(可读性更高)
    print("姓名:%(name)s,年龄:%(age)d" % {"name": "小红", "age": 19})

二、str.format () 方法

使用 {} 作为占位符,通过 format() 传递参数,支持位置索引、关键字参数、属性访问等

python 复制代码
# 基础用法(位置匹配)
print("姓名:{},年龄:{}".format("小明", 20))  # 输出:姓名:小明,年龄:20

# 指定位置索引(可重复使用参数)
print("年龄:{1},姓名:{0},再次输出姓名:{0}".format("小明", 20))  # 输出:年龄:20,姓名:小明,再次输出姓名:小明

# 关键字参数(可读性最佳)
print("姓名:{name},年龄:{age}".format(name="小红", age=19))

# 格式化复杂数据(字典/对象)
student = {"name": "小刚", "score": 95.8}
print("姓名:{name},成绩:{score:.1f}".format(**student))  # 解包字典,输出:姓名:小刚,成绩:95.8

# 访问对象属性
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
p = Person("小兰", 18)
print("姓名:{p.name},年龄:{p.age}".format(p=p))  # 输出:姓名:小兰,年龄:18

三、f-string(格式化字符串字面值)

  1. Python 3.6+ 引入的最优方案,语法简洁、性能最高、可读性最强,是目前推荐的主流方式。
  2. 字符串前加 f/F,{} 内直接写变量 / 表达式 / 函数调用,支持格式化修饰符
python 复制代码
# 基础用法
name = "小明"
age = 20
print(f"姓名:{name},年龄:{age}")  # 输出:姓名:小明,年龄:20

# 表达式计算
a = 10
b = 20
print(f"a + b = {a + b}")  # 输出:a + b = 30

# 函数调用
def get_score():
    return 98.765
print(f"成绩:{get_score():.2f}")  # 格式化修饰符,输出:成绩:98.77

# 格式化日期时间
import datetime
now = datetime.datetime.now()
print(f"当前时间:{now:%Y-%m-%d %H:%M:%S}")  # 输出:当前时间:2026-02-23 10:00:00(示例时间)

# 嵌套 f-string(Python 3.12+ 支持更友好)
user = {"name": "小红", "info": {"age": 19, "city": "北京"}}
print(f"姓名:{user['name']},城市:{user['info']['city']},年龄:{user['info']['age'] + 1}")  # 输出:姓名:小红,城市:北京,年龄:20

# 转义大括号
print(f"{{姓名:{name}}}")  # 输出:{姓名:小明}
相关推荐
haluhalu.1 分钟前
Agent = LLM + 上下文 + 工具(含观察 / 动作空间、ReAct 循环)
前端·javascript·人工智能·python·react.js·机器学习·个人开发
mldong3 分钟前
给 Django Admin 加审批流:一行前端代码没写,298 行接上工作流引擎
后端·python·架构
H.莓飛4 分钟前
【C++】类与对象(末):static、友元与拷贝优化
linux·开发语言·c++·visual studio
青春逝如流水12 分钟前
Java 线程在内存模型(JMM)与 JVM 实现:规范与落地的多元路径
java·开发语言·jvm·多线程·ai文章
weixin_460443565 小时前
2026年新修订《网络安全法》实施:Java私有化考试系统如何做好SBOM、漏洞治理与安全升级?
java·开发语言·在线考试系统·企业培训考试系统·宏远培训考试系统·国企培训考试系统·国产化培训系统
子兮曰6 小时前
把 649 种文件格式塞进一个网页里:一个「文件不出浏览器」的预览器
前端·javascript·后端
kobe_OKOK_7 小时前
__getattr__和__getattribute__如何用
python
全栈弄潮儿8 小时前
Python实战第2期: 变量与数据类型
后端·python·agent
长沙三为智能科技8 小时前
家政小程序门店运营模块设计:会员、下单、派单、结算四段链路的落地拆解
python·小程序·内容运营
Cc.Y8 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python