上一篇文章我们介绍了4种字符串格式化方法,其中最现代、最直观的方式是f-string,从Python 3.6开始引入,而且时不时就增加一些超级优雅的小改进。今天,钢铁老豆想要继续给大家展开介绍不同数据类型的格式化选项,以f-string为例,同样适用于其他格式化方法。
0.f-string简介
f-string,或称为格式化字符串字面值,是一种在字符串前加上 `f` 或 `F` 前缀的新语法。通过这种方式,您可以直接在字符串中嵌入表达式,并在运行时计算这些表达式的值。它不仅提高了代码的可读性,还加快了字符串处理的速度。
1.基本用法
使用 f-string 非常简单。只需在字符串前加上字母 `f`,并将表达式放在大括号 `{}` 中。
name = "张三"
age = 30
print(f"你好,{name},你明年就{age + 1}岁了。") # 你好,张三,你明年就31岁了。
除了基本的变量外,你还可以在花括号里调用函数、访问字典、执行算术运算等。
data = {'name': '赵六', 'job': '工程师'}
print(f"{data['name']} 是一名 {data['job']}")
2.格式化选项
下面,让钢铁老豆更详细地介绍 Python f-string 的各种格式化选项,满足不同数据类型的需求。
2.1 数字格式化
整数和浮点数
- 定制小数点位数:使用 `:.nf` 格式,其中 `n` 代表小数点后的位数。
number = 3.14159
print(f"{number:.3f}") # 输出 3.142
- 定制总宽度和小数点位数:使用 `:m.nf`,`m` 为总宽度,`n` 为小数点位数。
number = 3.14159
print(f"{number:10.3f}") # 宽度为10,小数点后3位
- 使用千位分隔符:使用 `:,` 可以为大数字添加千位分隔符。
number = 1234567.89
print(f"{number:,}") # 输出 1,234,567.89
进制转换
- 十六进制:使用 `:x` 或 `:X`。
number = 255
print(f"{number:x}") # 输出 ff
- 八进制:使用 `:o`。
number = 255
print(f"{number:o}") # 输出 377
- 二进制:使用 `:b`。
number = 255
print(f"{number:b}") # 输出 11111111
百分比格式化
- 百分比:使用 `:%` 或 `:.nf%` 格式化为百分比形式,`n` 定义小数位数。
fraction = 0.123
print(f"{fraction:.1%}") # 输出 12.3%
2.2 字符串格式化
- 对齐:使用 `:<` :>` 右对齐,`:^` 居中对齐。
name = "Alice"
print(f"{name:>10}") # 右对齐,宽度为10
- 填充:在对齐字符前添加填充字符。
name = "Alice"
print(f"{name:*^10}") # 使用*填充,居中对齐
- 截断:使用 `.n` 限制字符串长度,其中 `n` 是最大字符数。
text = "Hello World"
print(f"{text:.5}") # 输出 Hello
3.自定义对象格式化
如果对象实现了 `__format__` 方法,f-string 也可以使用指定的格式代码来格式化该对象。每当格式化一个对象时(例如,使用`format()`函数或在f-string中引用),Python会查找该对象的`__format__`方法。该方法接收一个格式说明符作为参数,这个说明符可以是空字符串,或是任何有效的格式代码,您可以在方法内部解释并应用这些代码。
例如,如果您正在设计一个财务相关的类,可能会想允许用户根据不同的货币或会计需求选择不同的显示格式:
class Money:
def __init__(self, amount):
self.amount = amount
def __format__(self, format_spec):
if format_spec == 'usd':
return f"${self.amount:.2f}"
elif format_spec == 'eur':
return f"EUR{self.amount:.2f}"
elif format_spec == 'clean':
return f"{self.amount:.2f}"
else:
# 默认为美元格式
return f"${self.amount:.2f}"
# 使用自定义格式
money = Money(1234.5)
print(f"{money}") # $1234.50
print(f"{money:'eur'}") # EUR1234.50
print(f"{money:'clean'}") # 1234.50
这除了增强类的自描述性和灵活性,还可以使对象的字符串表示形式更加友好和符合场景需求。这在创建API、框架或任何需要用户与您的对象进行交互的应用程序时特别有用。
好了,以上就是不同数据类型常见的格式化选项,f-string 不仅使用简单,而且非常强大和灵活。
欢迎点赞+收藏+评论+关注,每天学习一点Python小知识,无论基础、模块、数据分析、深度学习和Ai,总有你感兴趣的。我是钢铁老豆,一个30岁转行IT、自学成为算法工程师、想用Ai点亮孩子小小世界的Pythoner。