format 格式化函数
字符串调用方法format,并提供要设置其格式的值。
str.format()
方法通过字符串中的大括号{}
来识别替换字段 ,从而完成字符串的格式化。
字段名:
- 省略字段名:
{}
- 使用非负十进制整数
{0}
- 变量名{name}
省略字段名
大括号内省略字段名,根据位置参数参数。
-
替换字段形式:
{}
-
注意:大括号个数可以少于位置参数的个数。
s = '你好啊{},我叫{}!'.format('小明', '小红')
print(s)
print('{}你可以吗?不行我来'.format('小黑', '小小鸟'))
"""
你好啊小明,我叫小红!
小黑你可以吗?不行我来
"""
数字字段名
可以通过数字形式的简单字段名传递位置参数。
-
数字必须是大于等于 0 的整数。
-
带数字的替换字段可以重复使用。
-
数字形式的简单字段名相当于把 format 中的所有位置参数整体当作一个元组,通过字段名中的数字进行取值。即 {0} 等价于 tuple[0],所以大括号内的数字不能越界。
print('====数字字段名========') s = '你好啊{1},我叫{0}!'.format('小明', '小红') print(s) print('你好啊{0},我叫{1}!'.format('小明', '小红')) # 错误写法:相当于下标越界 # print('{1}'.format('ss')) """ 你好啊小红,我叫小明! 你好啊小明,我叫小红! """
关键字字段名(变量字段名)
使用变量名形式传递关键字参数,字段位置可随意,但需声明关键字。
print('大家好我叫{name},今年{age}岁了'.format(age=20, name='小毛毛'))
print('大家好我叫{name},今年{age}岁了'.format(name='小毛毛', age=20))
"""
大家好我叫小毛毛,今年20岁了
大家好我叫小毛毛,今年20岁了
"""
复合字段名
-
同时使用了数字和变量名两种形式的字段名就是复合字段名。
-
复合字段名
支持两种操作符:
.
点号[]
中括号
使用.
点号
传递位置参数
- 替换字段形式:
{数字.属性名}
- 只有一个替换字段的时候可以省略数字
class Person(object):
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
p = Person('zhangsan',18,'female')
print('姓名是{0.name},年龄是{0.age},性别是{0.gender}'.format(p))
print('姓名是{.name}'.format(p)) # 只有一个替换字段时,可以省略数字
使用[]
中括号
-
用列表传递位置参数
-
用元组传递位置参数
-
用字典传递位置参数
# 使用`[]`中括号
# 中括号用法:用元组传递位置参数
food = ('小毛毛', '南瓜')
print('我叫{0[0]},年龄{1},爱吃{0[1]}。'.format(
food, 36))
"""
我叫小毛毛,年龄36,爱吃南瓜。
"""
# 中括号用法:用字典传递位置参数
dic = dict(name='小毛毛', pid=1001)
print('我是{[name]}!'.format(
dic))
# 多个替换字段,不能省略数字
print('我是{0[name]},学号{0[pid]}。'.format(
dic))
"""
我是小毛毛!
我是小毛毛,学号1001。
"""
简化format
format格式化一般是在一段字符串后调用,format方法。
简化方法:在字符串前面声明f,既可以不用在写.format后面的语句。例:f'我是{name},今年{age}岁了。
大括号里面一般用变量传值。
name = '毛毛'
age = 20
print(f'我是{name},今年{age}岁了')
print(f'我是{"毛毛"},今年{age}岁了')
"""
我是毛毛,今年20岁了
我是毛毛,今年20岁了
"""
简单字段名的混合使用
- 混合使用数字形式和变量名形式的字段名,可以同时传递位置参数和关键字参数。
- 关键字参数必须位于位置参数之后。
- 混合使用时可以省略数字。
- 省略字段名
{}
不能和数字形式的字段名{非负整数}
同时使用。
转换标志
跟在叹号后面的单个字符。当前支持的字符包括r(表示repr)、s(表示str)和a(表示ascii)。如果你指定了转换标志,将不使用对象本身的格式设置机制,而是使用指定的函数将对象转换为字符串,再做进一步的格式设置。
# 转换字段
print('我是{!s}!'.format('小毛毛'))
print('我是{!r}!'.format('小毛毛'))
print('我是{!a}!'.format('小毛毛'))
"""
我是小毛毛!
我是'小毛毛'!
我是'u5c0fu6bdbu6bdb'!
"""
基本转换
类型 | 含义 |
---|---|
b | 将整数表示为二进制数 |
c | 将整数解读为Unicode码点 |
d | 将整数视为十进制数进行处理,这是整数默认使用的说明符 |
e | 使用科学表示法来表示小数(用e来表示指数) |
E | 与e相同,但使用E来表示指数 |
f | 将小数表示为定点数 |
F | 与f相同,但对于特殊值(nan和inf),使用大写表示 |
g | 自动在定点表示法和科学表示法之间做出选择。这是默认用于小数的说明符,但在默认情况下至少有1位小数 |
G | 与g相同,但使用大写来表示指数和特殊值 |
n | 与g相同,但插入随区域而异的数字分隔符 |
o | 将整数表示为八进制数 |
s | 保持字符串的格式不变,这是默认用于字符串的说明符 |
x | 将整数表示为十六进制数并使用小写字母 |
X | 与x相同,但使用大写字母 |
% | 将数表示为百分比值(乘以100,按说明符f设置格式,再在后面加上%) |
# 将小数表示为定点数
print("The number is {num}".format(num=42))
print("The number is {num:f}".format(num=42))
print("The number is {num:F}".format(num=42))
# 将整数转换为二进制数
print("The number is {num:b}".format(num=42))
"""
The number is 42
The number is 42.000000
The number is 42.000000
The number is 101010
"""
数字格式化
数字 | 格式 | 输出 | 描述 |
---|---|---|---|
3.1415926 | {:.2f} | 3.14 | 保留小数点后两位 |
3.1415926 | {:+.2f} | +3.14 | 带符号保留小数点后两位 |
-1 | {:+.2f} | -1.00 | 带符号保留小数点后两位 |
2.71828 | {:.0f} | 3 | 不带小数 |
5 | {:0>2d} | 05 | 数字补零 (填充左边, 宽度为2) |
5 | {:x<4d} | 5xxx | 数字补x (填充右边, 宽度为4) |
10 | {:x<4d} | 10xx | 数字补x (填充右边, 宽度为4) |
1000000 | {:,} | 1,000,000 | 以逗号分隔的数字格式 |
0.25 | {:.2%} | 25.00% | 百分比格式 |
1000000000 | {:.2e} | 1.00e+09 | 指数记法 |
13 | {:>10d} | 13 | 右对齐 (默认, 宽度为10) |
13 | {:<10d} | 13 | 左对齐 (宽度为10) |
13 | {:^10d} | 13 | 中间对齐 (宽度为10) |
print('{:.2f}'.format(3.1415926))
print('{:+.2f}'.format(3.1415926))
print('{:+.2f}'.format(-1))
print('{:.0f}'.format(2.71828))
print('{:0>2d}'.format(5))
print('{:x<4d}'.format(5))
print('{:x<4d}'.format(10))
print('{:,}'.format(1000000))
print('{:.2%}'.format(0.25))
print('{:.2e}'.format(1000))
print('{:>10d}'.format(13))
print('{:<10d}'.format(13))
print('{:^10d}'.format(13))
"""
3.14
+3.14
-1.00
3
05
5xxx
10xx
1,000,000
25.00%
1.00e+03
13
13
13
"""