一、
字符串的格式化输出目前有两种方式
- % 方式(陈旧)
- str.format() 方式(新式,官方推荐)
- f-string 方式 (Python3.6 及以上推荐使用)
1、 %方式
tpl = "i am %s" % "zhu"
print(tpl)
tpl = "i am %s age %d" % ("zhu", 18)
print(tpl)
tpl = "i am %(name)s age %(age)d" % {"name": "zhu", "age": 18}
print(tpl)
tpl = "percent %.2f" % 99.97623
print(tpl)
tpl = "i am %(pp).2f" % {"pp": 123.425556, }
print(tpl)
tpl = "i am %.2f%%" % 123.425556
print(tpl)
更多语法格式
%[(name)][flags][width].[precision]typecode
"""
(name) 可选,用于选择指定的key
Flags 可选,可供选择的值有:
+ 右对齐;正数前加正号,负数前加负号;
- 左对齐;正数前无符号,负数前加负号;
空格 右对齐;正数前加空格,负数前加负号;
0 右对齐;正数前无符号,负数前加负号;
用0填充空白处;
width 可选,占有宽度
.precision 可选,小数点后保留的位数
typecode 必选
"""
# typecode 有以下这些:
"""
s 获取传入对象的__str__方法的返回值,并将其格式化到指定位置
d 将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置
f 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置
(默认保留小数点后6位)
o 将整数转换成 八 进制表示,并将其格式化到指定位置
x 将整数转换成十六进制表示,并将其格式化到指定位置
% 当字符串中存在格式化标志时,需要用 %%表示一个百分号
"""
2、str.format() 方式
In [111]: 'I am {}'.format('duan')
tpl = "i am {}, age {}, {}"
r = tpl.format("tom", 18, 'man')
print(r)
tpl = "i am {}, age {}, {}"
r = tpl.format(*["tom", 18, 'man'])
print(r)
==========================================================
a, *b = ["tom", 18, 'man']
print(a)
print(b)
*b, a = ["tom", 18, 'ge']
print(a)
print(b)
tpl = "i am {0}, age {1}, really {0}"
print(tpl.format("tom", 18))
tpl = "i am {0}, age {1}, really {0}"
tpl.format(*["tom", 18])
tpl = "i am {name}, age {age}, really {name}"
print(tpl.format(name="tom", age=18))
#
tpl = "i am {name}, age {age}, really {name}"
print(tpl.format(**{"name": "tom", "age": 18}))
tpl = "i am {0[0]}, age {0[1]}, really {1[2]}"
print(tpl.format([1, 2, 3], [11, 22, 33]))
tpl = "i am {:s}, age {:d}, money {:f}"
print(tpl.format("seven", 18, 88888.1))
tpl = "i am {:s}, age {:d}".format(*["seven", 18])
print(tpl)
tpl = "i am {name:s}, age {age:d}"
tpl.format(name="xiguatian", age=18)
tpl = "i am {name:s}, age {age:d}"
tpl.format(**{"name": "xiguatian", "age": 18})
tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}"
print(tpl.format(15, 15, 15, 15, 15, 15.87623, 2))
tpl = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X},\
{0:.2%}"
print(tpl.format(15))
tpl = "numbers: {num:b},{num:o},{num:d},{num:x},\
{num:X}, {num:.2%}"
print(tpl.format(num=15))
print("{0:.3%}".format(0.15))
tpl = "{0:<6}---{0:<8}---{0:>13}"
print(tpl.format('123'))
更多语法格式
[[fill]align][#][0][width][,][.precision][type]
fill 【可选】空白处填充的字符
align 【可选】对齐方式(需配合width使用
# 【可选】对于二进制、八进制、十六进制,如果加上#,
会显示 0b/0o/0x,否则不显示
, 【可选】为数字添加分隔符,如:1,000,000
width 【可选】格式化位所占宽度
.precision 【可选】小数位保留精度
type 【可选】格式化类型
"""
"""
type 【可选】格式化类型
传入" 字符串类型 “的参数
s,格式化字符串类型数据
空白,未指定类型,则默认是None,同s
传入“ 整数类型 "的参数 b,将10进制整数自动转换成2进制表示然后格式化
c,将10进制整数自动转换为其对应的unicode字符
d,十进制整数
o,将10进制整数自动转换成8进制表示然后格式化;
x,将10进制整数自动转换成16进制表示然后格式化(小写x)
f , 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
%,显示百分比(默认显示小数点后6位)
3、模板字符串(标准库)
这是Python中字符串格式化的另一个工具:模板字符串。它是一种更简单,功能更少的机制,但在某些情况下,这可能正是您所需要的。
我们来看一个简单的示例:
In [114]: from string import Template
In [115]: name='duan'
In [116]: s=Template('hello $name')
In [117]: print(s.substitute(name=name))
hello duan
4、 f-string方式
f-string 也称为 格式化的字符串文字,是以f 或 F 为前缀的字符串文字。
这些字符串可能包含可被替换的字段,这些字段是由大括号 {} 分隔的表达式。
虽然其他字符串文字总是具有常量值,但格式化字符串实际上是在运行时计算的表达式。
语法
语法类似于 str.format() 的语法,但是你发现 str.formate() 方式有时候不是那么简洁。比如在一个有够多的变量需要替换时,就显得非常的臃长且不易读。
In [119]: name='duan'
In [120]: age='18'
In [121]: a=f'hello {name},your age {age}'
In [122]: a
Out[122]: 'hello duan,your age 18'
网友评论