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('小毛毛'))
"""
我是小毛毛!
我是'小毛毛'!
我是'\u5c0f\u6bdb\u6bdb'!
"""
基本转换
格式说明符:
跟在冒号后面的表达式(这种表达式是使用微型格式指定语言表示的)。格式说明符让我们能够详细地指定最终的格式,包括格式类型(如字符串、浮点数或十六进制数),字段宽度和数的精度,如何显示符号和千位分隔符,以及各种对齐和填充方式。
类型
含义
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
"""