前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python中格式化字符串的几种方法,你用对了吗?

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

原创
作者头像
mr.songw
修改2021-01-22 10:52:45
4080
修改2021-01-22 10:52:45
举报
文章被收录于专栏:Python 自习室Python 自习室
% 操作符

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

代码语言:txt
复制
>>> name = "Michael"
>>> print("Hello everyone, my name is %s." % name)
Hello everyone, my name is Michael.

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

代码语言:txt
复制
>>> 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.

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

代码语言:txt
复制
>>> 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() 方法是对 % 操作符的改进,上面使用 % 操作符的格式化可以对应的改成如下形式:

代码语言:txt
复制
>>> name = "Michael"
>>> print("Hello everyone, my name is {}.".format(name))
Hello everyone, my name is Michael.
代码语言:txt
复制
>>> 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.
代码语言:txt
复制
>>> 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,以此类推。

代码语言:txt
复制
>>> 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() 的参数外,还可以通过参数名来访问参数,例如:

代码语言:txt
复制
>>> 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 可将上述例子修改如下:

代码语言:txt
复制
>>> name = "Michael"
>>> print(f"Hello everyone, my name is {name}.")
Hello everyone, my name is Michael.
代码语言:txt
复制
>>> 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.
代码语言:txt
复制
>>> 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 的特性,我们不但可以在 {} 中放置变量名,而且可以放置任何有效的表达式。例如:

代码语言:txt
复制
>>> print(f"{1+2}")
3

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

代码语言:txt
复制
>>> def to_uppercase(input):
...     return input.upper()

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

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

代码语言:txt
复制
>>> 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.
总结

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • % 操作符
  • format 方法
  • f-string
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档