python中format函数用法(Python格式化字符串)


Python中的format函数是字符串格式化的核心工具,自Python 2.6引入后逐渐成为替代传统百分号(%)格式化的标准方案。其核心优势在于通过位置参数、关键字参数、对象属性等多维度动态插入数据,并支持复杂的格式规范控制。与f-string(Python 3.6+)相比,format函数具有更好的向后兼容性,且在处理复杂嵌套结构时表现更优。该函数采用``占位符语法,结合格式规范符(如填充、对齐、精度、类型转换)实现精细化控制,同时支持自定义字典、列表推导、表达式计算等高级特性。在多平台开发中,format函数可统一处理数值、日期、字节等数据类型的跨平台格式化需求,其灵活性和可扩展性使其成为科学计算、Web开发、自动化脚本等领域的首选工具。
一、基础语法与占位符机制
基础语法与占位符机制
format函数通过``占位符实现数据插入,支持位置参数和关键字参数两种传递方式。
参数类型 | 示例代码 | 输出结果 |
---|---|---|
位置参数 | " + = ".format(1,2,3) | 1 + 2 = 3 |
关键字参数 | "a+b=c".format(a=1,b=2,c=3) | 1+2=3 |
混合参数 | "01=2".format(2,3,6) | 23=6 |
占位符可通过索引编号或参数名称定位数据源,其中索引从0开始计数。当参数数量较多时,建议优先使用命名参数提升代码可读性。
二、填充与对齐控制
填充与对齐控制
通过格式规范符可精确控制字符串的填充字符、对齐方式及宽度。
格式规范 | 含义 | 示例 |
---|---|---|
>8 | 右对齐,总宽8字符 | ":>8".format("123") → ' 123' |
<8 | 左对齐,总宽8字符 | ":<8".format("123") → '123 ' |
^8 | 居中对齐,总宽8字符 | ":^8".format("123") → ' 123 ' |
^+=8 | 混合填充与对齐 | ":^+8".format(4) → '++4++' |
填充字符默认为空格,可通过前缀符号(如)指定自定义填充物。对齐方式优先级高于填充设置,常用于生成固定宽度的表格数据。
三、数值型数据处理
数值型数据处理
format函数支持整数、浮点数、复数等数值类型的精细化格式化。
格式规范 | 适用类型 | 示例 |
---|---|---|
, | 整数/浮点数 | ":,".format(1000000) → '1,000,000' |
.2f | 浮点数 | ":.2f".format(3.1415) → '3.14' |
+08d | 整数 | ":+08d".format(-12) → '-0000012' |
.2e | 科学计数法 | ":.2e".format(0.001234) → '1.23e-03' |
浮点数精度控制需注意四舍五入规则,复数类型可通过.nf
规范实部与虚部。对于金融类应用,千分位分隔符(,
)可显著提升数据可读性。
四、日期与时间格式化
日期与时间格式化
结合datetime模块,format函数可实现跨平台的日期时间格式化。
格式规范 | Python代码 | 输出示例 |
---|---|---|
%Y-%m-%d | dt.strftime('%Y-%m-%d') | 2023-10-05 |
%A, %B %d | dt.strftime('%A, %B %d') | Thursday, October 05 |
%H:%M:%S | dt.strftime('%H:%M:%S') | 15:30:45 |
需注意不同操作系统默认日期格式差异(如美式MM/DD/YYYY与欧式DD/MM/YYYY),使用format函数配合标准格式规范可确保跨平台一致性。时间戳处理可通过time.strftime()
实现类似效果。
五、类型转换与自定义映射
类型转换与自定义映射
format函数支持显式类型转换和自定义映射关系。
转换类型 | 格式规范 | 示例 |
---|---|---|
转字符串 | s | ":s".format(123) → '123' |
转浮点数 | f | ":f".format(456) → '456.000000' |
转十六进制 | x | ":x".format(255) → '0xff' |
自定义映射 | 映射字典 | "a":1.format(a=2) → '1' |
当传入参数类型与目标格式不匹配时,会触发隐式类型转换。例如对整数使用.2f
会自动转为浮点数。自定义字典映射可实现字段别名替换,但需确保键值对应关系准确。
六、嵌套格式化与复杂结构
嵌套格式化与复杂结构
format函数支持多层嵌套,可处理列表、字典、元组等复杂数据结构。
- 列表遍历:
"".format([i2 for i in [1,2,3]]) → '[2, 4, 6]'
- "a[b]".format(a="b":3) → '3'
- "(3+5)2".format() → '16'
嵌套层级过深时建议拆分格式化步骤,避免出现IndexError
或KeyError
。对于JSON结构数据,可结合json.dumps()
实现树状格式化。
七、性能对比与适用场景

不同格式化方案在执行效率和内存占用上存在显著差异。
方案类型 10万次循环耗时 str.format 0.8秒






