1.旧式 % 格式化
% 百分号格式化和 C 语言的 printf 格式化差不多。
# '%%' 格式化成 '%'
print('%% %d' % 1) #输出百分号和数字
# %c 字符及其ASCII码
print('%c' % 48) #输出ascii码48对应的0
# %s 字符串
# %d 十进制有符号整数
# %u 十进制无符号正数
# %o 八进制无符号数
# %x 十六进制无符号数
# %X 十六进制无符号数,大写字母
# %e 浮点数科学计数法
# %E 浮点数科学计数法,大写E
# %f 浮点数,小数点表示
print('%f' % 1.1) #输出1.100000默认六位小数
print('%.2f' % 1.1) #指定两位小数
# %g 浮点数,根据值大小采用 %e 或 %f
# %G 参照%g
# %p 十六进制地址
# %n 存储输出字符的数量放进参数列表的下一个变量中
# 多个参数时,可以用括号括起来
print('%d %s' % (999,'yyds'))
# 也可以用字典key来获取对应值
print('%(id)d %(str)s' % {'str':'yyds','id':999})
2.str.format() 方法
后来引入了一个新的字符串格式化的方法,str.format(),它增强了字符串格式化的功能。基本语法是通过 {} 和 : 来代替以前的 % 。format 接受任意个参数,位置可以不按顺序。
#顺序查找
print('{} and {} and {}'.format(1, 2, 3))
#指定位置
print('{2} and {1} and {0}'.format(1, 2, 3))
#通过参数名
print('{one} and {two} and {three}'.format(one=1,three=3,two=2))
#进行格式化
print('{one:d} and {two:.2f} and {three:s}'.format(one=1,three='three',two=2))
#取单个字符
print('{str[0]}'.format(str='hello world'))
#根据宽度对齐,^、<、>分别是居中、左对齐、右对齐
#全部为10个字符宽度左对齐
print('name={: <10s} score={: <10.1f}'.format('gong',79.5))
print('name={: <10s} score={: <10.1f}'.format('jianbo',67))
参考文档:string --- 常见的字符串操作 — Python 3.10.2 文档
3.f-string格式化字符串字面值(Python3.6+)
格式字符串字面值 或称 f-string 是标注了 'f' 或 'F' 前缀的字符串字面值。这种字符串可包含替换字段,即以 {} 标注的表达式。其他字符串字面值只是常量,格式字符串字面值则是可在运行时求值的表达式,会使用 format() 协议进行格式化。除非字面值标记为原始字符串,否则,与在普通字符串字面值中一样,转义序列也会被解码。
name='gongjianbo'
print(f'hello {name}')
print(F'hello {name}')
table=[{'name':'gong','score':79.5},{'name':'jianbo','score':67}]
for people in table:
print(f'name={people["name"]: <10s} score={people["score"]: <10.1f}')
a=10
b=15
print(f'a+b={a+b}')
参考文档:2. 词法分析 — Python 3.10.2 文档
4.模板字符串
模板字符串是一种较为简单的字符串替换方式。模板字符串的一个主要用例是文本国际化 (i18n),因为在此场景下,更简单的语法和功能使得文本翻译过程比使用 Python 的其他内置字符串格式化工具更为方便。
from string import Template
t = Template('$who likes $what')
s = t.substitute(who='lu', what='ma')
print(s) #输出 'lu likes ma'
创建模板后,可以用 substitute 或者 safe_substitute 进行替换,主要区别是 safe 版本未找到就返回原占位符不触发异常。