python笔记之字符串格式化

Python中字符串的格式化有两种方式:
1. 字符串格式化表达式,类似于C语言中的printf模型;
2. 字符串格式化方法调用,format方法。

字符串格式化表达式:"" % ()

格式化规则:%[(name)][flags][width][.precision]typecode

name: 字典键
flags: 左对齐(-),正负号(+),补零(0)的标志位
width: 位宽
.precision: 小数点位数

width和precision可以编码为一个*,实现动态控制

'this is %d %s bird' % (1, 'dead')

>>> "%f, %.2f, %.*f" % (1/3.0, 1/3.0, 4, 1/3.0)
'0.333333, 0.33, 0.3333'

#基于字典的字符串格式化, 引用字典键提取相应的值
>>> "%(n)d %(x)s" % {"n" : 1, "x" : "apple"}
'1 apple'
#配合vars()食用更佳 :)

字符串格式化调用方法:format

这种格式化方法是通过位置或关键字指出要被替换的目标及将要插入的参数,起到占位符的作用。

>>> '{0}, {1} ans {2}'.format('aaa', [1, 2, 3], 123)
'aaa, [1, 2, 3] ans 123'
>>> '{0}, {month} ans {food}'.format('egg', month=3, food=[1, 2])
'egg, 3 ans [1, 2]'

更高级的用法:通过位置或关键字引用对象的属性

>>> import sys
>>> 'my {1[keyname]} run {0.platform}'.format(sys, {'keyname':'laptop'})
'my laptop run win32'

>>> 'my {config[keyname]} runs {sys.platform}'.format(sys=sys, config={'keyname':'laptop'})
'my laptop runs win32'

#还可以指定列表(或者其它序列)的偏移量进行索引
>>> 'first={0[0]}, third={0[2]}, last={1[1]}'.format([11, 22, 33], "use")
'first=11, third=33, last=s'

更具体的格式化:
在替换对象的标识之后用一个冒号,后面跟着可以指定字段大小、对齐方式等的一个格式化声明,其形式化结构如下:
{fieldname !convertionflag : formatspec}
* fieldname: 标识替换对象的一个数字或关键字
* conversionflag: 可以是r, s , a对应repr, str, ascii函数在该值上的一次调用。
* formatspec: 指定位宽,对齐方式,补零,小数点精度

formatspec组成形式描述如下:
[[fill]align][sign][#][0][width][,precision][typecode]
align:可以是<, >, ^分别表示左对齐,右对齐,居中对齐
#:在八进制数前显示0,十六进制数前显示0x或者0X
0 :填充0而不是空格
precision:小数点位数
typecodeo, x, d, b八进制,十六进制,十进制,二进制…

>>> '{0:<5}|{1:>5}|{2:^5}'.format(123, 123, 123)
'123  |  123| 123 '

>>> '{0:e}, {1:.3e}, {2:g}'.format(math.pi, math.pi, math.pi)
'3.141593e+00, 3.142e+00, 3.14159'

>>> '{0:x}, {0:o}, {0:b}, {0:d}'.format(255)
'ff, 377, 11111111, 255'

>>> '{0:.{1}f}'.format(1/3, 5)
'0.33333'

>>> '{!s}, {!r}, {!a}'.format(333, 444, 555)
'333, 444, 555'

>>> '{0:#10x}'.format(15)
'       0xf'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值