python format 高级用法_python 字符串格式化高级用法 | 酷python

字符串格式化高级用法

字符串的格式化主要有三种方式,分别是使用 %格式化,format方法格式化,fstring格式化。

1. %操作符

str_format = "I'm %s. I'm %d years old"

string = str_format % ('lilei', 14)

print(string)

str_format是模板,在模板里有格式符,示例中有两个格式符,分别是%s, %d。这些格式符为真实值预留了位置,并说明了真实值应该呈现的格式,%s表示字符串,%d表示整数,第二行 使用 % 进行格式化时,后面紧跟一个元组,这个元组将多个值传递给模板,每个值依次对应到模板里的一个格式符。上面的例子输出的结果是

I'm lilei. I'm 14 years old

1.1 格式符

格式符有很多种,你需要根据实际需要来选择模板里的格式符

%s 字符串 (采用str()的显示)

%r 字符串 (采用repr()的显示)

%c 单个字符

%b 二进制整数

%d 十进制整数

%i 十进制整数

%o 八进制整数

%x 十六进制整数

%e 指数 (基底写为e)

%E 指数 (基底写为E)

%f 浮点数

%F 浮点数,与上相同

%g 指数(e)或浮点数 (根据显示长度)

%G 指数(E)或浮点数 (根据显示长度)

%% 字符"%"

2. format

我个人十分喜欢使用format方法对字符串进行格式化操作,因为相比于使用%操作符,format方法更加直观和简单,尤其是在格式化时与字典,元组,对象相结合的情况下,简直爽歪了。

2.1 format一般用法

log = "{id}-{type}-{msg}"

print(log.format(id=1,type='debug',msg=u'测试连接'))

同样需要一个格式化模板,与使用%操作符格式化不同的时,使用format方法进行格式化时,使用{}来为真实值预留位置,大括号内你可以随意编写变量名称,然后在format方法里为这些变量赋予真实值。

2.2 与字典结合的用法

如果真实值存储在一个字典里,且模板里预留了好多位置需要填充真实值,那我真的不想在format方法里为那么多参数赋值

info = {

'id':1,

'type':'debug',

'msg':u'测试连接'

}

log = "{0[id]}-{0[type]}-{0[msg]}".format(info)

print(log)

log = "{info[id]}-{info[type]}-{info[msg]}".format(info=info)

print(log)

这两种格式化的方式都可行,我个人推荐使用第二种。

2.3 与tuple结合的方法

info = (1,'debug',u'测试连接')

log = "{0[0]}-{0[1]}-{0[2]}".format(info)

print(log)

log = "{info[0]}-{info[1]}-{info[2]}".format(info=info)

print(log)

2.4 与对象结合的方法

除了字典和元组,还可以使用对象

class Info(object):

def __init__(self, id, type, msg):

self.id = id

self.type = type

self.msg = msg

info = Info(1,'debug',u'测试连接')

log = "{info.id}-{info.type}-{info.msg}".format(info=info)

print(log)

2.5 不指定关键字参数

使用format方法时,如果为了方便,也可以不指定关键字参数,而是依据参数顺序格式化字符

log = "{}-{}-{}"

print(log.format(1, 'debug', '测试连接'))

format方法里的参数会依次填入字符串中的{}中

2.6 控制宽度

在格式化字符串时,有时需要控制一下宽度,比如下面这段打印九九乘法表的代码

for i in range(1, 10):

line = ""

for j in range(1, i+1):

line += "{left} * {right} = {product} ".format(left=i, right=j, product=i*j)

print(line)

输出结果

1 * 1 = 1

2 * 1 = 2 2 * 2 = 4

3 * 1 = 3 3 * 2 = 6 3 * 3 = 9

4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16

5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25

6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36

7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49

8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64

9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81

注意看第3列,明显没有对齐,原因在于第2列的乘积出现了大于10的情况,挤占了空间,为了能更美观的显示效果,我们需要控制格式化字符串时的宽度,只需要将待格式化的字符串稍稍做一下修改即可

line += "{left} * {right} = {product:3} ".format(left=i, right=j, product=i*j)

我指定product被格式化以后站3个字符的宽度,这样,不论乘积是否大于10,都占3个字符宽度

1 * 1 = 1

2 * 1 = 2 2 * 2 = 4

3 * 1 = 3 3 * 2 = 6 3 * 3 = 9

4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16

5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25

6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36

7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49

8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64

9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81

3. f-string

3.1 f-string用法

f-string,亦称为格式化字符串常量(formatted string literals),是Python3.6新引入的一种字符串格式化方法。f-string让字符串的格式化更加简便,本质上f-string不是字符串常量,而是一个可以在运行时运算求值的表达式。

color = 'red'

string = f"I like {color}"

print(string)

从形式看,f-string是以f或F装饰引领的字符串,内部使用大括号为真实值预留位置,那么大括号所标注的需要被替换的字段填充什么值呢?

填充什么值,要看f-string所在的作用域里与大括号内相对应的变量值。在本示例中,大括号里的字段名称是color,而当前所在作用域里恰好有一个变量的名称叫做color,那么字符串格式化时就会填充变量color的值,使用f-string的优势就在于它省略了这个指明填充值的过程。不仅如此,f-string还提供了更加强大的功能

color = 'red'

string = f"I like {color.upper()}"

print(string)

大括号里甚至可以传入表达式和函数,在这个示例中,真实值是color变量转大写的结果。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值