今天我们谈谈格式化输出的那些鲜为人知的故事…
一、精准之format()函数
历史 Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能
模板方式为: '{被格式化内容的索引:格式化形式选择}'.format(被格式化内容)
热身部分(不设置参数,直接指定索引)
示例1
>>> "{} {}".format("hello", "world") # 不设置指定位置,按默认顺序 'hello world' >>> "{0} {1}".format("hello", "world") # 设置指定位置 'hello world' >>> "{1} {0} {1}".format("hello", "world") # 设置指定位置 'world hello world'
示例2
print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com")) # 通过字典设置参数 site = {"name": "菜鸟教程", "url": "www.runoob.com"} print("网站名:{name}, 地址 {url}".format(**site)) # 通过列表索引设置参数 my_list = ['菜鸟教程', 'www.runoob.com'] print("网站名:{0[0]}, 地址 {0[1]}".format(my_list)) # "0" 是必须的 依次输出为: 网站名:菜鸟教程, 地址 www.runoob.com 网站名:菜鸟教程, 地址 www.runoob.com 网站名:菜鸟教程, 地址 www.runoob.com
示例3
也可以向 str.format() 传入对象: class AssignValue(object): def __init__(self, value): self.value = value my_value = AssignValue(6) print('value 为: {0.value}'.format(my_value)) # "0" 是可选的 输出结果为: value 为: 6
输入 | 格式 | 输出 | 描述 |
---|---|---|---|
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) |
11 | '{:b}'.format(11) '{:d}'.format(11) '{:o}'.format(11) '{:x}'.format(11) '{:#x}'.format(11) '{:#X}'.format(11) |
1011 11 13 b 0xb 0XB |
进制 |
^
,<
,>
分别是居中、左对齐、右对齐,后面带宽度,:
号后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。+
表示在正数前显示+
,负数前显示-
; (空格)表示在正数前加空格b、d、o、x
分别是二进制、十进制、八进制、十六进制
。- 此外我们可以使用大括号
{}
来转义大括号,如下实例:- 代码: print (“{} 对应的位置是 {{0}}”.format(“runoob”))
- 输出为>>> runoob 对应的位置是 {0}
二、精准之%
百分号格式化
%
百分号格式化部分引自zzwwsun的博客(此处表示万分感谢!)
https://blog.csdn.net/weixin_41064957/article/details/78725004
运算符:
%
格式:
格式化字符串%参数值
或
格式化字符串%(参数值1,参数值2,...)
示例:
fmt = '姓名:%s, 年龄:%d'
name = '张飞'
age = 20
print(fmt % (name, age))
格式化字符串中的占位符和类型码
占位符类型码 意义
%s 字符串
%r 字符串,使用repr,而不是str
%c 整数转为单个字符
>>> "%c" %20013 #返回值:'中',类似于chr(20013)
%d 十进制整数
>>> "%d" %10 #返回值:'10'
%o 八进制整数
>>> "%o" %10 #返回值:'12'
%x 十六进制整数(字符a-F小写)
>>> "%x" %10 #返回值:'a'
%X 十六进制整数(字符A-F大写)
>>> "%X" %10 #返回值:'A'
%e 指数型浮点数(e小写),如2.9e+10
>>> "%e" %29979000000.0 #返回值:'2.997900e+10'
%E 指数型浮点数(E大写),如2.9E+10
>>> "%E" %29979000000.0 #返回值:'2.997900E+10'
%f, %F 浮点十进制形式
>>> "%f" %29979000000.0 #返回值:'29979000000.000000'
>>> "%F" %29979000000.0 #返回值:'29979000000.000000'
>>> "%F" %2.997e+10 #返回值:'29970000000.000000'
%g, %G 十进制形式浮点或指数浮点自动转换
>>> "%g" %12.123 #返回值:'12.123'
>>> "%g" %12545361564531.123321564 #返回值:'1.25454e+13'
%% 等同于一个%字符
>>> "利率为%f%%" %1.8 #返回值:'利率为1.800000%'
占位符%和类型码之间的格式语法:
% [格式语法] 类型码 (a,s,f等)
格式语法:
- 左对齐
+ 右对齐
0 补零
宽度(十进制数字)
宽度.精度(十进制数字) #f,F
示例:
>>> "%10d" %123 #返回值:' 123'
>>> "%-10d" %123 #返回值:'123 '
>>> "%10s" %123 #返回值:' 123'
>>> "%10s" %'abc' #返回值:' abc'
>>> "%-5s" %'abc' #返回值:'abc '
>>> "%+10d" %123 #返回值: +123'
>>> "%010d" %123 #返回值:'0000000123'
>>> "%0010d" %123 #返回值:'0000000123'
>>> "%020.5f" %123.123545689 #返回值:'00000000000123.12355'
>>> "%0-20.5f" %123.123545689 #返回值:'123.12355 '
>>> "%-020.5f" %123.123545689 #返回值:'123.12355 '
>>> "%+020.5f" %123.123545689 #返回值:'+0000000000123.12355'
>>> "%4.4f" %3.1415926 #返回值:'3.1416'