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

 更新时间:2024年10月31日 09:49:46   作者:仙草哥哥  
字符串格式化是一项常见且重要的操作,用于动态生成包含变量内容的字符串,本文为大家整理一些常用的格式化字符串方法,希望对大家有所帮助

字符串格式化

字符串格式化是一项常见且重要的操作,用于动态生成包含变量内容的字符串。关于字符串的格式化,在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格式化字符串的资料请关注脚本之家其它相关文章!

相关文章

  • Python对CSV、Excel、txt、dat文件的处理

    Python对CSV、Excel、txt、dat文件的处理

    本文介绍的是Python对CSV、Excel、txt、dat文件的处理,具有一定的参考价值,需要的朋友跟随小编一起来看下
    2018-09-09
  • 使用Python实现给企业微信发送消息功能

    使用Python实现给企业微信发送消息功能

    本文将介绍如何使用python3给企业微信发送消息,文中有详细的图文解说及代码示例,对正在学习python的小伙伴很有帮助,需要的朋友可以参考下
    2021-12-12
  • 使用Python VTK 完成图像切割

    使用Python VTK 完成图像切割

    这篇文章主要介绍了使用Python VTK 完成图像切割,文章内容基于python的相关资料展开对主题的详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • 基于Python获取亚马逊的评论信息的处理

    基于Python获取亚马逊的评论信息的处理

    这篇文章主要介绍了基于Python获取亚马逊的评论信息的处理方法,用户的评论能直观的反映当前商品值不值得购买,亚马逊的评分信息也能获取到做一个评分的权重,感兴趣的朋友跟随小编一起看看吧
    2022-02-02
  • python开启debug模式的方法

    python开启debug模式的方法

    这篇文章主要介绍了python开启debug模式的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • python操作excel的方法(xlsxwriter包的使用)

    python操作excel的方法(xlsxwriter包的使用)

    这篇文章主要为大家详细介绍了python操作excel的方法,xlsxwriter包的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • 超全面python常见报错以及解决方案梳理必收藏

    超全面python常见报错以及解决方案梳理必收藏

    使用python难免会出现各种各样的报错,以下是Python常见的报错以及解决方法(持续更新),快进入收藏吃灰吧
    2022-03-03
  • Python使用pandas和xlsxwriter读写xlsx文件的方法示例

    Python使用pandas和xlsxwriter读写xlsx文件的方法示例

    今天小编就为大家分享一篇关于Python使用pandas和xlsxwriter读写xlsx文件的方法示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • Python Web框架之Django框架Form组件用法详解

    Python Web框架之Django框架Form组件用法详解

    这篇文章主要介绍了Python Web框架之Django框架Form组件用法,结合实例形式详细分析了Django框架中各种常用Form组件的功能、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-08-08
  • 老生常谈python函数参数的区别(必看篇)

    老生常谈python函数参数的区别(必看篇)

    下面小编就为大家带来一篇老生常谈python函数参数的区别(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05

最新评论