Python学习笔记:字符串格式化方法

本文最后更新于:2023年3月15日 中午

1 %模式

类似C/C++中printf语法。

1
2
3
4
5
name = '小明'
age = 10
gender = '男'
str = "这个%s孩叫%s,今年%d岁!" % (gender, name, age)
print(str)

常用的python字符串格式化符号:

符号描述
%s字符串
%d整数
%f浮点数

可以采用辅助指令精细化控制:

符号描述
数字控制输出宽度
.数字控制小数点位数
-左对齐
+正数前显示加号
0显示的数字前填充0
1
2
3
4
5
6
name = '小明'
age = 10
gender = '男'
weight = 50
str = "这个%10s孩叫%-10s,今年%+10d岁,体重%010.2f千克!" % (gender, name, age, weight)
print(str)

输出结果:

1
这个         男孩叫小明        ,今年       +10岁,体重0000050.00千克!

为了避免参数顺序不对,也可以使用类似字典的模式填入数据:

1
2
3
4
5
name = '小明'
age = 10
gender = '男'
str = "这个%(gd)s孩叫%(nm)s,今年%(ag)d岁!" % {"nm": name, "gd": gender, "ag": age}
print(str)

使用字典就不用担心后面的参数问题,还可以重复使用key:

1
2
3
4
5
name = '小明'
age = 10
gender = '男'
str = "这个%(gd)s孩叫%(nm)s,今年%(ag)d岁! 我是%(gd)s的!" % {"nm": name, "gd": gender, "ag": age}
print(str)

2 .format

格式化字符串函数str.format()可以接受参数不限,位置可以不按顺序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
name = '小明'
age = 10
gender = '男'
weight = 50
# 不设置指定位置,按默认顺序
str1 = "这个{}孩叫{},今年{}岁,体重{}千克!".format(gender, name, age, weight)
# 设置指定位置
str2 = "这个{0}孩叫{1},今年{2}岁,体重{3}千克!".format(gender, name, age, weight)
# 设置指定位置,复用
str3 = "这个{1}孩叫{2},今年{0}岁,体重{3}千克!是{1}的!".format(age, gender, name, weight)

print(str1)
print(str2)
print(str3)

运行结果如下:

1
2
3
这个男孩叫小明,今年10岁,体重50千克!
这个男孩叫小明,今年10岁,体重50千克!
这个男孩叫小明,今年10岁,体重50千克!是男的!

可以使用字典模式:

1
2
3
4
5
6
name = '小明'
age = 10
gender = '男'
weight = 50
str = "这个{gd}孩叫{nm},今年{age}岁,体重{w}千克!".format(nm=name, gd=gender, age=age, w=weight)
print(str)

可以通过字典、列表、对象设置参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Human():
def __init__(self, name):
self.name = name


name = '小明'
age = 10
gender = '男'
weight = 50

dict = {"name": "小明", "age": 10, "gender": "男", "weight": 50}
str1 = "这个{gender}孩叫{name},今年{age}岁,体重{0}千克!".format(weight, **dict)

list = ['小明', 10, '男']
str2 = "这个{0[2]}孩叫{0[0]},今年{0[1]}岁,体重{1}千克!".format(list, weight)

human = Human("小明")
str3 = "这个{1}孩叫{0.name},今年{2}岁,体重{3}千克!".format(human, gender, age, weight)

print(str1)
print(str2)
print(str3)

format数字格式控制:

符号描述
^居中
<左对齐
>右对齐
:后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。
+带符号
1
2
3
4
5
6
7
pi = 3.1415926
print("圆周率是{:.2f}".format(pi))
print("圆周率是{:+.2f}".format(pi))
print("圆周率是{:+.2f}".format(-pi))
print("圆周率是{:*>10.2f}".format(pi))
print("圆周率是{:#<10.2f}".format(-pi))
print("圆周率是{:0^10.2f}".format(-pi))

输出结果是:

1
2
3
4
5
6
圆周率是3.14
圆周率是+3.14
圆周率是-3.14
圆周率是******3.14
圆周率是-3.14#####
圆周率是00-3.14000

3 f-string

f-string 是 python3.6 之后版本添加的,称之为字面量格式化字符串,是新的格式化字符串的语法。

f-string 格式化字符串以 f开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去:

1
2
3
4
5
6
7
8
9
name = '小明'
age = 10
gender = '男'
weight = 50

dict = {"name": "小明", "age": 10, "gender": "男", "weight": 50}
str1 = f"这个{gender}孩叫{name},今年{dict['age']}岁,体重{weight}千克!"

print(str1)

甚至可以直接运算:

1
2
3
4
5
6
7
8
9
name = '小明'
age = 10
gender = '男'
weight = 50

dict = {"name": "小明", "age": 10, "gender": "男", "weight": 50}
str1 = f"这个{gender}孩叫{name},今年{dict['age']}岁,明年{age + 1}岁!"

print(str1)

在 Python 3.8 的版本中可以使用 =符号来拼接运算表达式与结果:

1
2
3
4
5
6
7
8
9
name = '小明'
age = 10
gender = '男'
weight = 50

dict = {"name": "小明", "age": 10, "gender": "男", "weight": 50}
str1 = f"这个{gender}孩叫{name},今年{dict['age']}岁,明年{age + 1=}岁!"

print(str1)

输出结果:

1
这个男孩叫小明,今年10岁,明年age + 1=11岁!

数字格式也和format类似。

1
2
3
4
5
6
7
8
9
name = '小明'
age = 10
gender = '男'
weight = 50

dict = {"name": "小明", "age": 10, "gender": "男", "weight": 50}
str1 = f"这个{gender}孩叫{name},今年{dict['age']:^10d}岁,明年{age + 1=}岁!"

print(str1)

输出结果:

1
这个男孩叫小明,今年    10    岁,明年age + 1=11岁!

Python学习笔记:字符串格式化方法
https://summersong.top/post/56458426.html
作者
SummerSong
发布于
2022年8月21日
更新于
2023年3月15日
许可协议