1 %模式
类似C/C++中printf语法。
1 2 3 4 5
| name = '小明' age = 10 gender = '男' str = "这个%s孩叫%s,今年%d岁!" % (gender, name, age) print(str)
|
常用的python字符串格式化符号:
可以采用辅助指令精细化控制:
符号 | 描述 |
---|
数字 | 控制输出宽度 |
.数字 | 控制小数点位数 |
- | 左对齐 |
+ | 正数前显示加号 |
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)
|
格式化字符串函数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岁!
|