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官方文档 - 输入与输出

你可能感兴趣的:(Python,python)