32 个 Python 实例彻底解析 f-String 格式化浮点数 004【推荐收藏】

呆鸟云:

格式化字符串的其他方式

format() 函数是格式化字符串的另一种方式。该函数接受两个参数:要格式化的值及格式说明符。

例 22 介绍了 format() 函数的使用方法及使用 f-string 的等效方法。

1>>> format(-123.4567"+9.2f")
2'  -123.46'
3>>> f"{-123.456:+9.2f}"
4'  -123.46'
5
6>>> format(0.125".2%")
7'12.50%'
8>>> f"{0.125:.2%}"
9'12.50%'

format() 函数使用与 f-strings 相同的格式规范迷你语言。

例 22 中的小例 1 使用 +9.2f 显示的字符串是带符号的浮点数,填充到 9 个字符,并四舍五入到小数点后两位。

例 22 中的小例 2 使用 .2% 以百分比的形式显示有两个小数的浮点数。

与 format() 函数相比,f-string 的代码更紧凑,也更易读。

Python 早期版本中还提供了 str.format() 方法,该方法需要在字符串中插入替代字段,以指定数据的位置。

此外,还要将格式说明符添加到替代字段中,以指定数据显示的格式。

最后,以与替代字段相同的顺序将数据作为参数传递给 .format()

str.format() 的使用方法如例 23 所示。

1>>> opposite = 1.234
2>>> adjacent = 5.678
3>>> hypotenuse = (opposite**2 + adjacent**2) ** 0.5
4>>> template = "Opposite = {:0.1f}, Adjacent = {:0.2f}, Hypotenuse = {:0.3f}"
5>>> template.format(opposite, adjacent, hypotenuse)
6'Opposite = 1.2, Adjacent = 5.68, Hypotenuse = 5.811'

从例 23 可以看出,替换字段的占位符按顺序把参数传递给 .format() 方法。尽管这种方式没有 f-string 易读,但仍使用相同的迷你语言定义字符串的格式。

也可以使用关键字将值传递给 .format()。当把关键字添加到字符串的替换字段中时,相应的值会在显示字符串时插入其中。实现方式如例 24 所示。

 1>>> template = (
2...     "Opposite = {opposite:0.1f}, "
3...     "Adjacent = {adjacent:0.2f}, "
4...     "Hypotenuse = {hypotenuse:0.3f}"
5... )
6>>> template.format(
7...     hypotenuse=(1.234**2 + 5.678**2)**0.5,
8...     adjacent=5.678,
9...     opposite=1.234
10... )
11'Opposite = 1.2, Adjacent = 5.68, Hypotenuse = 5.811'

例 24 通过关键字把参数传递给 .format()

注意:当使用关键字传递参数时,参数的顺序并不重要,只要关键字与格式说明符中的占位符匹配即可,Python 会进行替换。

除了把值一个一个地传给关键字参数,还可以使用 Python 字典批量传入参数。实现方式如例 25 所示。

 1>>> data = {
2...     "opposite"1.234,
3...     "adjacent"5.678,
4...     "hypotenuse": (1.234**2 + 5.678**2) ** 0.5,
5... }
6
7>>> template = (
8...     "Opposite = {opposite:0.1f}, "
9...     "Adjacent = {adjacent:0.2f}, "
10...     "Hypotenuse = {hypotenuse:0.3f}"
11... )
12
13>>> template.format(**data)
14'Opposite = 1.2, Adjacent = 5.68, Hypotenuse = 5.811'

例 25 使用 ** (解包操作符)将 data 字典传递给 .format(),把字典的键作为命名参数,并把字典的值作为命名参数的值。

例 25 的代码写法与 f-strings 语法非常接近。甚至还可以创建自定义的数字格式化模板。自定义模板的方式如例 26 所示。

1>>> num = "{:{align}{width}.{precision}f}"
2>>> print(
3...     num.format(
4...         123.236, align="<", width=8, precision=2
5...     )
6... )
7123.24

例 26 首先把数字和命名参数一起传递给 .format(),以此来构建格式说明符,然后再使用 num 模板格式化数字。

.format() 还支持在运行时动态定义格式说明符。假设要把单词填充到比其长度多 4 个字符的宽度,实现方式如例 27 所示。

1>>> text = "Python is cool"
2>>> padded_words = [
3...     "{word:*^{length}}".format(word=word, length=len(word) + 4)
4...     for word in text.split()
5... ]
6
7>>> padded_words
8['**Python**''**is**''**cool**']

例 27 中的格式说明符包含了 .format() 要接收的参数名称。

word 用于接收要格式化的单词 。

length 用于接收动态计算的宽度。

在格式说明符中嵌套精度的替换字段 {length}。其中,* 是要填充的字符,^ 表示输出结果居中。

padded_words 列表是使用列表推导式创建的。调用 .split() 拆分 text 变量,根据空格将 text 字符串分隔为包含 3 个单词的列表。然后,使用 for 循环输出每个单词,并把它们传递给 .format()

当 .format() 接收单词时,它的值分配给 word 变量,其长度加上 4 个字符后分配给 length 变量。然后,在格式说明符中使用这些变量,以在 padded_words 中生成格式化的字符串。

练习题 - 字符串格式化挑战

练习 8:例 27 使用 str.format() 方法生成了字符串列表 ['**Python**','**is**','**cool**']。请使用 f-string 语法编写代码生成同样的字符串列表。

练习 9:使用 numbers = [1234.56789, 123.456789, 12.3456789, 1.23456789] 列表,编写格式说明符生成 numbers_formatted 列表,包含 ["1,234.5679","123.457","12.35","1.2"]

每个数字都要进行四舍五入,使小数点前后的数字相同。


虽然小编已经尽力避免错误,但本文仍可能存在 bug,欢迎读者在公众号后台进行反馈。


推荐阅读

32 个 Python 实例彻底解析 f-String 格式化浮点数 001【推荐收藏】

32 个 Python 实例彻底解析 f-String 格式化浮点数 002【推荐收藏】

32 个 Python 实例彻底解析 f-String 格式化浮点数 003【推荐收藏】


相关推荐

  • 京东秒送售后系统退款业务重构心得
  • 【腾讯云 BI 数据分析可视化大赛】有奖征文活动
  • 今天,创业4周年。
  • 混元文生图大模型正式开源:15 亿参数、首个中文原生DiT架构、与腾讯现网版本完全一致!
  • 都2024年了,串口通信还在用TTL?
  • 10.1K Star零门槛上手音频转文字工具
  • React19 她来了,她来了,他带着礼物走来了
  • GPT-4o成全球网友新玩具,秒秒钟纸质原型转录初始HTML,网友:谷歌你是一点流量摊不上啊
  • 蚂蚁百灵大模型一号位:GPT-4o发布不意外,原生多模态方向已明
  • Ilya出走加剧OpenAI离职潮!RLHF作者Jan Leike同日辞职,超级对齐项目分崩离析
  • AI拉货挣钱,已经绕地球2500圈了
  • 字节跳动大模型首次全员亮相:一口气9个,价格低99%,没有参数规模和榜单分数
  • 告别3D高斯Splatting算法,带神经补偿的频谱剪枝高斯场SUNDAE开源了
  • 首个中文原生DiT架构!腾讯混元文生图大模型全面开源,免费商用
  • 谷歌反击:Project Astra正面硬刚GPT-4o、Veo对抗Sora、新版Gemini变革搜索
  • Ilya官宣离职,超级对齐负责人Jan直接辞职,OpenAI还是走散了
  • 大模型价格进入“厘”时代,豆包大模型定价每千tokens仅0.8厘
  • 使用VPN“翻墙”违法,为什么大部分人都没事?
  • 70岁洗发水之王,20亿卖了
  • 今日arXiv最热NLP大模型论文:又到美国大选年,南加大教你如何用ChatGPT影响竞选