Python 有三种格式化方式,推荐最后一种;

% 格式化操作符

print('Binary is %d, hex is %d' % (a, b))

str.format 格式化

print('{} = {}'.format(key, value))

你可以在 {} 里写个冒号,然后把格式说明符写在冒号的右边,用以规定 format 方法所接收的这个值应该按照怎样的格式来调整。在 Python 解释器里输入 help('FORMATTING'),可以详细查看 str.format 使用的这套格式说明符所依据的规则。

formatted = '{:<10} = {:2f}'.format(key, value)

这种写法的效果可以这样理解:系统先把 str.format 方法接收到的每个值传给内置的 format 函数,并找到这个值在字符串里对应的 {},同时将 {} 里面写的格式也传给 format 函数,例如系统在处理 value 的时候,传的就是 format(value, '.2f')

调用 str.format 方法的时候,也可以给 str 的{}里面写上数字,用来指代 format 方法在这个位置所接收到的参数值位置索引。

formatted = '{1} = {0}'.format(key, value)

同一个位置索引可以出现在 str 的多个{}里面,这些{}指代的都是 format 方法在对应位置所收到的值。

formatted = '{0} loves food. {0} loves bed.'.format('kity')

当然,这种{}形式的说明符,还支持一些比较高级的用法,例如可以查询 dict 中某个键的值,可以访问 list 里某个位置的元素,还可以把值转化成 Unicode 或 repr 字符串。下面这段代码把这三项特性结合了起来。

formatted = 'First letter is {menu[oyster][0]!r}.'.format(menu=menu)

插值格式字符串

formatted = f'{key}={value}'
formatted = f'{key!r:<10} = {value:.2f}'
 
for i, (item, count) in enumerate(party):
	print(f'#{i+1}:'
		  f'{item.title();10s} = '
		  f'{round(count)}')
 
print(f'My number is {number:.{place}f}')