当前位置: 代码网 > it编程>前端脚本>Python > Python中格式化字符串的方法总结

Python中格式化字符串的方法总结

2024年10月31日 Python 我要评论
字符串格式化字符串格式化是一项常见且重要的操作,用于动态生成包含变量内容的字符串。关于字符串的格式化,在python的历史上,曾经存在多种格式化字符串的方式,因此,这可能带来困扰,一些人可能不清楚应该

字符串格式化

字符串格式化是一项常见且重要的操作,用于动态生成包含变量内容的字符串。关于字符串的格式化,在python的历史上,曾经存在多种格式化字符串的方式,因此,这可能带来困扰,一些人可能不清楚应该使用哪一种格式化方法,下面,我就进行一下详细的介绍。

当前推荐做法:f-string

毫无疑问,f-string是现在最适合的字符串格式化的方法,因此首先进行介绍。f-string最早引入自3.6,因此需要3.6以后版本的python可以使用。

使用方法: 在字符串前加上 f 或 f,并在花括号 {} 内填入变量或者表达式。

name = "sagegrass"
age = 18
greeting = f"你好,我的名字是{name},我今年{age}岁,我去年{age - 1}岁"
 
print(greeting)

在python3.8以后,加入了f-string调试支持,使用方法为在变量或者表达式以后添加=,从而同时输出名称和结果。

name = "sagegrass"
print(f"{name=}") # 此时输出结果为name=sagegrass

历史做法

%格式化

历史做法是在以前版本的python中非常常见的做法,你可以在很多较早期的代码中看见,并且,时至今日也并非完全没有使用价值,一些人可能现在仍然这样做(但最好应该改为使用f-string)。

%格式化是python中最早的字符串格式化方法,已经有几十年的历史了,最早从c语言中继承过来的。

使用方法: "格式字符串" % 值

name = "sagegrass"
age = 18
greeting = "你好,我的名字是%s,我今年%d岁,我去年%d岁" % (name, age, age - 1)
 
print(greeting)

其中,%s用于字符串,%d用于整型,另外还有一个常用的是%f,用于浮点数的格式化。但是由于其较为古老,既不好用,也容易出现问题,因此现在已经不建议使用了。

format格式化

format格式化是在python2.6以及3.0时期引入的,format提供了更强大和灵活的字符串格式化功能。

使用方法:"格式字符串".format(值1, 值2, ...)

p1 = "锄禾"
p2 = "当午"
p3 = "汗滴"
p4 = "下土"
poem = "{}日{},{}禾{}".format(p1, p2, p3, p4)
 
print(poem)

format格式化还允许提供位置参数,多次使用同一个变量。

p1 = "一寸"
p2 = "光阴"
p3 = "金"
poem = "{0}{1}{0}{2},寸{2}难买寸{1}".format(p1, p2, p3)
 
print(poem)

format格式化还允许提供关键字参数,根据指定参数名使用。

name = "sagegrass"
age = 18
greeting = "你好,我的名字是{name},我今年{age}岁,我去年{age_of_last_year}岁".format(name=name, age=age, age_of_last_year=age - 1)
 
print(greeting)

与%格式化字符串不同,format至今仍然是一个非常不错的选择,甚至在某些语言中,最新引入的格式化字符串的方式,就是类似format的方式。

template格式化字符串

这是一个好的格式化字符串的方式,但是较少使用,这可能与其来自于string模块,而不可以直接使用有一些关系。

from string import template
 
name = "sagegrass"
age = 18
template = template("你好,我的名字是$name,我今年$age岁,我去年$age_of_last_year岁")
greeting = template.substitute(name=name, age=age, age_of_last_year=age - 1)
 
print(greeting)

如果使用safe_substitute,那么在缺少变量的时候,也不会抛出异常,此时将保留原文

from string import template
 
name = "sagegrass"
age = 18
template = template("你好,我的名字是$name,我今年$age岁,我去年$age_of_last_year岁")
greeting = template.safe_substitute(name=name)
 
print(greeting) # 你好,我的名字是sagegrass,我今年$age岁,我去年$age_of_last_year岁

不常用做法

字符串拼接

还有一些做法,不是很好,如非特殊情况,不应该作为一个字符串格式化的方法,下面简单的介绍,但是实际使用中应该小心谨慎。

字符串拼接是通过例如+运算符,将多个字符串拼接为一个,它确实可以动态的生成字符串,不过其实不算是一个格式化字符串的方式。

name = "sagegrass"
age = 18
greeting = "你好,我的名字是" + name + ",我今年" + str(age) +"岁,我去年" + str(age - 1) + "岁"
 
print(greeting)

这种方式确实简单易懂,但是缺点在于性能低下,且难以读懂(尤其是在拼接字符串的数量变多的情况下)

str.join()连接

join()其实也不是用于进行字符串格式化的,它通常用于一些其他的功能。它起到了和字符串拼接相似的功能,但是性能通常却更好一点,理论上是字符串拼接的上位替代,但是仍然不建议这样做。

name = "sagegrass"
age = 18
greeting = "".join(("你好,我的名字是", name, ",我今年", str(age), "岁,我去年", str(age - 1), "岁"))
 
print(greeting)

自定义字符串格式化

只有非常特殊的需求才可能这样做,一般情况下,这其实比较奇怪。

import re
 
def my_format(template, **kwargs):
    return re.sub(r'\{(\w+)\}', lambda match: str(kwargs.get(match.group(1), match.group(0))), template)
 
name = "sagegrass"
age = 18
greeting = my_format("你好,我的名字是{name},我今年{age}岁,我去年{age_of_last_year}岁", name=name, age=age, age_of_last_year=age - 1)
print(greeting)

缺点包括自定义可能产生一些错误,或者是性能问题,好处在于可以按照自己的想法自定义格式化字符串的方法,并且添加一些需要的额外功能。

总结

2024年都快过完了,再有几个月就是2025年了,对于新的代码,目前(截止python3.12)应该尽可能使用f-string,这在过去可能是一个问题,因为前几年,可能还有非常多的人在使用python3.5,这个版本没有f-string功能,但是时至今日,3.7都已经很罕见了,f-string的使用也不再是一个“版本”问题了。

以上就是python中格式化字符串的方法总结的详细内容,更多关于python格式化字符串的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com