Python字符串操作:str.format

简介

format是python中极其重要的函数,用来做字符串格式化,核心原理是在字符串中使用花括号{}来代表待替换的部分,类似占位符,然后把待替换的数据填充进对应的花括号中,以此完成对字符串的格式化。

format中允许多种不同的花括号形式,来支持对应数据的填充,接下来会简单介绍。

填充方式

按位置填充

直接举例讲解吧:

print('而{},{}的朋友,{}才是真正的英雄'.format('你', '我', '你'))
# 而你,我的朋友,你才是真正的英雄

花括号的数量跟后面参数的数量必须是一样的,后面的参数将会按照位置一一对应填充到前面的花括号里。

花括号数量 多于 参数数量,报错;

花括号数量 少于 参数数量,可以正常跑;

按数字填充

按数字填充的好处是,可以重复使用后面的参数。

print('而{1},{0}的朋友,{1}才是真正的英雄'.format('我', '你'))
# 而你,我的朋友,你才是真正的英雄

注意:

  • 数字必须是大于0的整数

这里的0表示后面的第一个位置参数,1表示第二个位置参数,以此类推。

按关键字填充

按数字填充的话,后面需要配合的是位置参数。按关键字填充的话,后面配合的是关键字参数。

print('而{you},{my}的朋友,{you}才是真正的英雄'.format(my='我', you='你'))
# 而你,我的朋友,你才是真正的英雄

这种方式更加直观。不止可以重复使用后面的参数,后面参数是关键字参数的话,也就不用考虑参数的顺序之类的问题了。

混合填充

这个没啥好说的

print('而{you},{0}的朋友,{you}才是真正的英雄'.format('我', you='你'))
# 而你,我的朋友,你才是真正的英雄

使用时需要注意,关键字参数和位置参数的前后顺序关系。

字典/列表填充

直接举例:

name = ['我', '你']
name_dict = {'my': '我', 'you': '你'}

print('而{1},{0}的朋友,{1}才是真正的英雄'.format(*name))
print('而{you},{my}的朋友,{you}才是真正的英雄'.format(**name_dict))
print('而{you},{0}的朋友,{you}才是真正的英雄'.format(*name, **name_dict))
#而你,我的朋友,你才是真正的英雄
#而你,我的朋友,你才是真正的英雄
#而你,我的朋友,你才是真正的英雄

其中,列表有个特殊用法,即结合方括号使用,举例:

name = ['我', '你']
print('而{0[1]},{0[0]}的朋友,{0[1]}才是真正的英雄'.format(name))
#而你,我的朋友,你才是真正的英雄

挺花里胡哨的,感觉不如.format(*name)直观。

类变量填充

将需要替换的变量定义成类变量,在format里通过实例直接把对应的实例变量赋值给对应的花括号,注意,花括号里和类里的变量名必须是一样的。

class Name():
    def __init__(self, my, you):
        self.my = my
        self.you = you

name = Name('我', '你')

print('而{0.you},{0.my}的朋友,{0.you}才是真正的英雄'.format(name))
print('而{p.you},{p.my}的朋友,{p.you}才是真正的英雄'.format(p=name))
print('而{.you}'.format(name))
#而你,我的朋友,你才是真正的英雄
#而你,我的朋友,你才是真正的英雄
#而你

当只有一个字段的时候,就可以省略数字。

格式调整

字符串对齐

使用语法:

  • '{:待填充字符^宽度}.format()':宽度为5,居中对齐;
  • '{:待填充字符<宽度}.format()':宽度为5,左对齐;
  • '{:待填充字符>宽度}.format()':宽度为5,右对齐;

需要注意:

  • 待填充字符只能是一个字符;
  • 如果不指定待填充字符,如:<5,则默认使用空格填充。

举例:

print('{:0^5}'.format(1))
print('{:0<5}'.format(1))
print('{:0>5}'.format(1))
print('{:^5}'.format(1))
#00100
#10000
#00001
#  1  

数字格式化

这些功能比较多,比如说还可以进行各种进制之间的转换,就不全面介绍了,只介绍一些十进制里比较常用的用法。

保留指定小数位数(自动四舍五入,也能实现科学计数法的转换):

print('{:.2f}'.format(12.3456)) # 12.35
print('{:.0f}'.format(12.56)) # 13
print('{:.2f}'.format(1.23e+5)) # 123000.00

千分位展示

print('{:,}'.format(1000000)) # 1,000,000

百分比转换(自动转换百分比形式,并自动保留指定位小数):

print('{:.1%}'.format(0.31415)) # 31.4%

科学计数法转换

print('{:.1e}'.format(100000000)) # 1.0e+08

不同进制之间的转换(如二进制b、八进制o、十六进制x、带0x开头的十六进制是#x等):

print('{:b}'.format(12))    # 1100

参考文献:

  1. Python的format用法详解
  2. Python 进制转换,一步到位
  3. python官方文档 - 输入与输出
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值