Python 字符串(%,.format,f)

1.%操作符(所有版本都支持)

python2.6之前只支持这一种格式化方法。这类似于C语言的格式化方法。

1.1举个例子

>>> print("I'm %s. I'm %d year old" % ('Tom', 27))

I'm Tom. I'm 27 year old

>>> print("I'm %(name)s. I'm %(age)d year old" % {'name':'Tom', 'age':27})

I'm Tom. I'm 27 year old

说明:

%符号前面使用一个字符串作为模板,模板中有标记格式的占位符号(如%s,%d),%后面是一个tuple或者dict,用来传递需要格式化的值。

1.2占位符类型说明

1.3完整的占位符控制

%(数据名称)[对齐标志][宽度].[精度]类型

数据名称

数据名称用于字典赋值,如果%符号后面传的tuple就不需要填写了。注意在字符串内要用()括起来。

对齐标志

有 +\-\0\' ' 四种形式,+表示显示正负数符号,-表示左对齐,空格表示在左侧填充一个空格,0表示用0填充

宽度

表示格式化后的字符串总长度(也就是len(str),所以小数点也算在内),位数不足用0或空格补齐

精度

小数点后的位数

类型

请参考上一节 - 占位符类型说明

1.4几个例子

>>> print('%08.3f' % 12.34)

0012.340

>>> print('%(num)08.3f' % {"num":12.34})

0012.340

>>> print('%+08.3f' % 12.34)

+012.340

2. str.format (Python2.6及以后支持)

对比于%

威力更加强大,在映射关系方面,format函数支持位置映射、关键字映射、对象属性映射、下标映射等多种方式,不仅参数可以不按顺序,也可以不用参数或者一个参数使用多次

举个例子

>>> '{1} {0}'.format('abc', 123)  # 可以不按顺序进行位置映射,输出'123 abc'

>>> '{} {}'.format('abc', 123)  # 可以不指定参数名称,输出'abc 123'

>>> '{1} {0} {1}'.format('abc', 123)  # 参数可以使用多次,输出'123 abc 123'

>>> '{name} {age}'.format(name='tom', age=27)  # 可以按关键字映射,输出'tom 27'

>>> '{person.name} {person.age}'.format(person=person)  # 可以按对象属性映射,输出'tom 27'

>>> '{0[1]} {0[0]}'.format(lst)  # 通过下标映射

可以看到,format函数比%操作符使用起来更加方便,不需要记住太多各种占位符代表的意义,代码可读性也更高

完整的占位符控制

[:填充字符][对齐方式][符号标志][#][宽度][,][.精度][类型]

说明:

类型

说明

示例说明

'{:S^+#016,.2f}'.format(1234)

:填充字符

不填时默认用空格填充

:S表示用S填充

对齐方式

^表示居中对齐,  <表示左对齐, >表示右对齐

^表示居中对齐,左右位数不足部分会用填充字符

符号标志

+表示有符号(正数前显示+,负数前显示-),  空格表示整数前加一个空格以和负数对齐

+表示有符号

#

表示在二进制、八进制、十六进制前显示0b,0o,0x等符号

#表示显示进制符号,由于实例是十进制,所以输出没有特别的符号

宽度

表示输出字符串的宽度

016表示字符串总宽度为16,不足部分会使用填充字符补齐

,

表示使用,作为干千位分符

,表示使用千位分隔符

精度

表示小数点后数字位数

.2表示精度为2位

类型

s表示字符串类型,c表示字符类型,f表示浮点型, eE表示小写和大写的科学记数法

0b 0o 0d分别表示二八十进制,

xX表示小写和大写十六进制,

f表示浮点型

一些例子:

>>> '{:S^+#016,.2f}'.format(1234)

'SSS+1,234.00SSSS'

>>> '{:S^+#016b}'.format(1234)

'S+0b10011010010S'

>>> '{:S^+#016.2E}'.format(1234)

'SSS+1.23E+03SSSS'

3.f'string' (python3.6及之后版本支持)

f'string'就是以f''开头的字符串,类似u'string'和r'string',字符串内容和format方法中的格式一样,但是可以直接将变量带入到字符串中。

一些例子:

>>> f'{1234:S^+#016,.2f}'

'SSS+1,234.00SSSS'

>>> f'{1234:S^+#016b}'

'S+0b10011010010S'

>>> amount = 1234; f'请转账给我{amount:,.2f}元'

'请转账给我1,234.00元'

4.速度对比 (数据来自于参考链接)

5.总结

建议根据版本使用最新的字符串格式化方法,但其实很多项目有用% 和 format。总的来说都不是必须使用哪种方法,更应该考虑的是你的程序是否要进行版本兼容。

参考链接:

https://zhuanlan.zhihu.com/p/37936007

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值