Python:格式化字符串字面量 f-string

360影视 动漫周边 2025-09-08 00:03 2

摘要:在 Python 的众多字符串格式化方法中,格式化字符串字面量(Formatted String Literals,简称f-string)是一种现代且高效的解决方案。它不仅语法简洁、可读性强,还在性能上优于 % 和 .format。

在 Python 的众多字符串格式化方法中,格式化字符串字面量(Formatted String Literals,简称f-string)是一种现代且高效的解决方案。它不仅语法简洁、可读性强,还在性能上优于 % 和 .format。

f-string 仅支持 Python 3.6 及以上版本,在早期版本中不可用。

一、基本用法及特点

f-string 的语法形式为:

在字符串前添加前缀 f 或 F,并在字符串内部使用花括号 { } 插入变量或表达式。

name = "mediaTEA"age = 7print(f"My name is {name} and I am {age} years old.")# 输出:My name is mediaTEA and I am 7 years old.

1、{} 内可插入任意表达式

# 例 1:print(f"The result of 5 + 3 is {5 + 3}")# 输出:The result of 5 + 3 is 8# 例 2:def square(x):return x * xprint(f"The square of 4 is {square(4)}")# 输出:The square of 4 is 16

(1)花括号 { } 内可以放入任意合法的 Python 表达式(包括运算、函数调用、方法调用、三元运算符等)。

(2)表达式会在运行时即时求值,并自动调用 转换为字符串。

2、转换标志

在表达式后加 !,可以指定如何将结果转换为字符串:

!s → 使用 (用户友好,默认效果)

!r → 使用 (开发者友好,常带引号)

!a → 使用 (非 ASCII 字符会转义)

name = "mediaTEA"print(f"{name!s}") # mediaTEAprint(f"{name!r}") # 'mediaTEA'print(f"{'媒体'!a}") # '\u5a92\u4f53' ← 用非 ASCII 文本才能体现 !a 的效果

3、格式控制

在花括号内,表达式后可以接一个冒号 :,其后跟格式说明符,用于控制显示形式。

pi = 3.14159print(f"{pi:.2f}") # 保留两位小数 → 3.14print(f"{pi:10.2f}") # 宽度 10,右对齐 → ' 3.14'

二、数字和日期的格式化

1、数值格式化

f-string 支持与 str.format 类似的格式规范,可控制小数位数、对齐方式、宽度、千位分隔符等。

pi = 3.1415926print(f"Pi rounded to 2 decimals: {pi:.2f}")# 输出:Pi rounded to 2 decimals: 3.14

常见数值格式化写法:

2、日期格式化

f-string 可以直接嵌入日期对象,并使用与 模块里的方法 strftime 相同的格式控制符。

from datetime import datetimenow = datetime.nowprint(f"Current time: {now:%Y-%m-%d %H:%M:%S}")# 输出:Current time: 2025-09-05 10:28:36

常见日期格式化符号:

三、进阶用法

1、使用字典和列表

f-string 可直接在 { } 中嵌入对字典或列表元素的访问表达式,语法与常规表达式完全一致。

访问字典元素:

person = {"name": "mediaTEA", "age": 7}print(f"{person['name']} is {person['age']} years old.")# 输出:mediaTEA is 7 years old.

访问列表元素:

colors = ["red", "green", "blue"]print(f"The first color is {colors[0]}.")# 输出:The first color is red.

2、多行 f-string

多个 f-string 可通过括号 组合,适用于构建多行结构化内容。

name = "mediaTEA"score = 95message = (f"Student: {name}\n"f"Score: {score}\n"f"Status: {'Pass' if score >= 60 else 'Fail'}")print(message)# 输出:# Student: mediaTEA# Score: 95# Status: Pass

3、嵌套 f-string

f-string 可嵌套在表达式中使用。

value = 42print(f"{f'Value is {value}'}!")# 输出:Value is 42!

嵌套会降低可读性,能在外层处理就不要嵌套。

4、调试式 f-string

自 Python 3.8 起,支持调试风格写法(使用 = 号),可快速输出“表达式=值”。

x = 10y = 5print(f"{x=}, {y=}, {x + y=}")# 输出:x=10, y=5, x + y=15

五、常见错误与陷阱

1、不能写赋值语句

在 f-string 的花括号 { } 内,表达式必须是可求值的,而不是语句。赋值语句(如 x = 10)会直接报语法错误。

# ❌ 错误# print(f"{x = 10}")

提示:

但 :=(赋值表达式,Python 3.8+)是可以的:

print(f"{(n := 10)}") # 10print(f"{(n := 10):04}") # 0010print(f"{n=}") # n=10

注意:f-string 的表达式直接写 := 是不允许的,必须加括号。

2、不能跨多行表达式

f-string 的 { } 内部必须写在同一行,不能把一个表达式拆开写在多行,否则会报错。

# ❌ 错误# print(f"{1 +# 2}")

提示:

如果表达式过长,应先在外部计算好,再传入 f-string。

3、注意引号冲突

当在 f-string 内部访问字典或字符串时,如果同时使用相同的引号(双引号嵌套双引号),会引发语法错误。

person = {"name": "Tom"}print(f"{person['name']}") # ✅ 正确# print(f"{person["name"]}") # ❌ 报错:引号冲突

解决办法是:内外引号交替使用,比如在外层用单引号,内层用双引号。

4、对象无合适的 __str__ / __repr

如果类未定义 __str__ 或 __repr__ 方法,f-string 默认使用从 object 继承的 __repr__,输出的内容可读性差。

class A: passprint(f"{A}") #

建议为类实现 __str__(用户友好显示)或 __repr__(调试友好显示),从而得到更直观的输出。

六、补充说明

1、转义花括号

若要在字符串中输出花括号字符 { 或 },请使用双括号进行转义。

print(f"Use {{ and }} to represent curly braces.")# 输出:Use { and } to represent curly braces.

2、可选前缀组合

在 f 前后加上原始字符串前缀 r 或 R(rf"" 或 fr""),使反斜杠 \ 不产生转义。

path = "C:\\Users\\Test" # 变量真实值:C:\Users\Testprint(rf"Path: {path}\nEnd")# 输出:Path: C:\Users\Test\nEnd (原始字符串使 \n 保留为字面量)

3、f-string 与其他格式化方式对比

“点赞有美意,赞赏是鼓励”

来源:学长教育

相关推荐