Python中格式化字符串的几种方法,你用对了吗?

% 操作符

在 Python 2.6 之前,可以使用 % 操作符进行字符串的格式化。例如:

>>> name = "Michael"
>>> print("Hello everyone, my name is %s." % name)
Hello everyone, my name is Michael.

如果需要插入的变量数大于 1,需要将这些变量放到一个元组里。

>>> name = "Michael"
>>> age = 20
>>> print("Hello everyone, my name is %s, I am %d years old." % (name, age))
Hello everyone, my name is Michael, I am 20 years old.

以上当变量的个数较少时,使用 % 操作符格式化字符串的可读性还是比较强的。但是当变量的个数变多时,可读性会变差,并且容易出错。例如:

>>> first_name = "Michael"
>>> last_name = "Jordan"
>>> age = 20
>>> profession = "writer"
>>> num = 3
>>> print("Hello everyone, my name is %s %s, I am %d years old, I am a %s, I have writed %d novels." % (first_name, last_name, age, profession, num))
Hello everyone, my name is Michael Jordan, I am 20 years old, I am a writer, I have writed 3 novels.
format 方法

在 Python 2.6 版本中,引入了 format() 方法。format() 方法是对 % 操作符的改进,上面使用 % 操作符的格式化可以对应的改成如下形式:

>>> name = "Michael"
>>> print("Hello everyone, my name is {}.".format(name))
Hello everyone, my name is Michael.
>>> name = "Michael"
>>> age = 20
>>> print("Hello everyone, my name is {}, I am {} years old.".format(name, age))
Hello everyone, my name is Michael, I am 20 years old.
>>> first_name = "Michael"
>>> last_name = "Jordan"
>>> age = 20
>>> profession = "writer"
>>> num = 3
>>> print("Hello everyone, my name is {} {}, I am {} years old, I am a {}, I have writed {} novels.".format(first_name, last_name, age, profession, num))
Hello everyone, my name is Michael Jordan, I am 20 years old, I am a writer, I have writed 3 novels.

format() 方法中,由于可以通过索引来引用参数,所以上面例子中 format 的参数顺序不是必须为 first_name、last_name、age、profession、num,我们可以将参数的顺序修改为 age、profession、last_name、first_name、num,然后通过参数的索引来引用参数。age 的索引为 0,profession 的索引为 1,以此类推。

>>> first_name = "Michael"
>>> last_name = "Jordan"
>>> age = 20
>>> profession = "writer"
>>> num = 3
>>> print("Hello everyone, my name is {3} {2}, I am {0} years old, I am a {1}, I have writed {4} novels.".format(age,profession,last_name,first_name,num))
Hello everyone, my name is Michael Jordan, I am 20 years old, I am a writer, I have writed 3 novels.

除了可以通过索引来访问 format() 的参数外,还可以通过参数名来访问参数,例如:

>>> first_name = "Michael"
>>> last_name = "Jordan"
>>> age = 20
>>> profession = "writer"
>>> num = 3
>>> print("Hello everyone, my name is {first_name} {last_name}, I am {age} years old, I am a {profession}, I have writed {num} novels.".format(age=age,profession=profession,last_name=last_name,first_name=first_name,num=num))
Hello everyone, my name is Michael Jordan, I am 20 years old, I am a writer, I have writed 3 novels.

format() 方法在可读性方面比 % 操作符有了较大的改进,但是当参数个数较多时,依然比较容易出错。

f-string

在 Python 3.6 版本中,引入了 formatted string literals,简称 f-string。f-string 在语法方面和 format() 类似,但是更加简洁。使用 f-string 可将上述例子修改如下:

>>> name = "Michael"
>>> print(f"Hello everyone, my name is {name}.")
Hello everyone, my name is Michael.
>>> name = "Michael"
>>> age = 20
>>> print(f"Hello everyone, my name is {name}, I am {age} years old.")
Hello everyone, my name is Michael, I am 20 years old.
>>> first_name = "Michael"
>>> last_name = "Jordan"
>>> age = 20
>>> profession = "writer"
>>> num = 3
>>> print(f"Hello everyone, my name is {first_name} {last_name}, I am {age} years old, I am a {profession}, I have writed {num} novels.")
Hello everyone, my name is Michael Jordan, I am 20 years old, I am a writer, I have writed 3 novels.

从上面几个例子可以看出,f-string 语法更加简洁,而且不容易出错。由于 f-string 的特性,我们不但可以在 {} 中放置变量名,而且可以放置任何有效的表达式。例如:

>>> print(f"{1+2}")
3

在 {} 中,我们还可以进行函数的调用

>>> def to_uppercase(input):
...     return input.upper()

>>> name = "Michael Jordan"
>>> print(f"{to_uppercase(name)}")
MICHAEL JORDAN

在类中,我们也可以使用 {}。

>>> class Writer:
...     def __init__(self, first_name, last_name, age):
...         self.first_name = first_name
...         self.last_name = last_name
...         self.age = age
...     def __str__(self):
...         return f"Hello everyone, my name is {self.first_name} {self.last_name}, I am {self.age} years old."
...     def __repr__(self):
...         return f"Hello everyone, my name is {self.first_name} {self.last_name}, I am {self.age} years old, good!."
...
>>> new_writer = Writer("Michael", "Jordan", 20)
>>> new_writer
Hello everyone, my name is Michael Jordan, I am 20 years old, good!.
>>> print(new_writer)
Hello everyone, my name is Michael Jordan, I am 20 years old.
总结

本文讨论了格式化字符串的几种方式以及他们之间的优劣,为我们选择合适的方法进行字符串的格式化提供指导。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值