Python的format()函数

本文深入探讨了Python中format函数的高级用法,包括字符串、数字的格式化处理,如千分位分隔、小数点保留、数字补零等,并展示了如何通过format函数实现个性化输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

上篇博文,我们用format(number,',')快速实现了对数字千分位的分隔。
熟悉python的人都知道,foramt函数更常见的用法其实是str.format(),其基本语法是通过{}来代替以前的%
示例:

>>>"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
'hello world'
 
>>> "{0} {1}".format("hello", "world")  # 设置指定位置
'hello world'
 
>>> "{1} {0} {1}".format("hello", "world")  # 设置指定位置
'world hello world'

注意:如果在字符串中需要直接展示花括号,则用另一个花括号包裹起来转义。
见示例:

>>> "{{我是谁}}:{}".format("皮卡丘")
'{我是谁}:皮卡丘'

也支持参数式填写,有点像SHELL的变量:

>>> "我是谁:{pikachu}".format(pikachu="皮卡丘")
'我是谁:皮卡丘'

数字格式化

数字格式输出描述
3.141592{:.2f}3.14保留小数点后两位
3.141592{:+.2f}+3.14带符号保留小数点后两位
3.141592{:.0f}3不带小数,四舍五入
3{:0>2d}03数字补零 (填充左边, 宽度为2)
3{x<4d}3xxx数字补x (填充右边, 宽度为4)
123456789{:,}123,456,789千分位隔开
0.38{:.2%}38%百分比格式
1000000000{:.2e}1.00e+09指数记法
11{:b}1011二进制转化

b、d、o、x 分别是二进制、十进制、八进制、十六进制。


看到这里,其实上一篇千分位的处理,还有更进阶的内容。
由表可知,千分位的分隔可以直接使用"{:,}".format(nunber)来解决,这里有个问题,如果分隔的时候带小数,且最后几位是0的话,在被format转化成字符串的时候会被忽略,就像这样:

>>> "{:,}".format(12345678.90)
'12,345,678.9'

>>> format(12345678.90,',')
'12,345,678.9'

如果我们希望保留想要的小数位数,需要这样子:

>>> "{:,.2f}".format(12345678.90)
'12,345,678.90'

>>> "{:,.4f}".format(12345678.90)   #任意几位都行
'12,345,678.9000'

所以,format函数在解决数字格式化输出的时候是很强大的,可以组合使用其中的规则来达到个性化定制的目的。

END

### Python 中 `format` 函数的使用指南 #### 基础概念 `format` 是 Python 字符串的一个内置方法,用于格式化字符串。它通过 `{}` 占位符替代传统的 `%` 符号来进行数据替换[^2]。 #### 调用机制 当调用 `format(value, format_spec)` 方法时,实际上是将其转化为 `type(value).__format__(format_spec)` 的形式来执行。这意味着会优先在对象类型的定义中寻找 `__format__()` 方法并调用;如果没有找到该方法,则抛出 `TypeError` 异常[^1]。 #### 格式说明符 (`format_spec`) `format_spec` 参数允许指定详细的显示规则,比如对齐方式、填充字符、精度等。其通用结构如下: ``` [[fill]align][sign][#][0][width][grouping_option][.precision][type] ``` 以下是部分常用选项解释: - **Align**: `<`, `>`, `=`, 或者 `^` 控制左对齐、右对齐、数值前补零或者居中。 - **Sign**: 可选加号 `+` 显示正负数标志,空格保留符号位置但仅标记负数 `-`. - **Width**: 定义字段宽度。 - **Precision**: 对浮点型设置有效数字数量。 - **Type**: 如整数(`d`)、十六进制(`x`)、科学计数法(`e`)等形式表示[^2]. #### 实际应用案例 ##### 简单示例 ```python print("Hello {}, your score is {}".format("Alice", 95)) ``` 这段代码将输出 `"Hello Alice, your score is 95"`[^2]。 ##### 自定义类支持 可以通过实现特殊方法 `__str__` 和 `__format__` 来控制自定义类型如何被格式化展示。例如下面的例子展示了一个人的信息打印: ```python class Person: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return "这个人的名字叫 {name} 年龄为 {age}".format(name=self.name, age=self.age) person_instance = Person('张三', 30) print(person_instance) ``` 这里利用了 `.format(self=self)` 技巧传递实例本身给内部模板解析器[^3]。 ##### 复杂格式化 考虑更复杂的场景下需要精确控制输出样式的情况: ```python number = 1234.56789 formatted_number = "{:.2f}".format(number) # 输出 '1234.57' percentage_value = "{:%}".format(0.75) # 输出 '75%' binary_representation = "{:#b}".format(255) # 输出 '0b11111111' ``` 以上分别演示了四舍五入到两位小数、百分比转换以及二进制表现的功能。 #### 总结 综上所述,Python 的 `format` 函数提供了强大而灵活的文字拼接能力,并且能够很好地兼容各种复杂的数据呈现需求。无论是基本变量还是定制化的对象都可以借助这一工具优雅地完成最终结果构建。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值