f-string的完整特性与高级技巧(含3.12新特性)
请全面介绍Python f-string的特性,包含表达式、多行、转义、调试功能(=)、嵌套格式化、性能优势,以及Python 3.12中f-string的重大改进(支持反斜杠、多行)。
回答
苦行僧
基本特性
name, age = 'Alice', 30
f'My name is {name} and I am {age}' # 变量引用
f'{2 ** 10}' # 表达式
f'{name.upper()}' # 方法调用
高级技巧
1. 调试功能(Python 3.8+)
x, y = 10, 20
f'{x=}, {y=}, {x+y=}' # 'x=10, y=20, x+y=30'
2. 格式规范
f'{3.14159:.2f}' # '3.14'
f'{1000000:,.0f}' # '1,000,000'
3. 嵌套格式化
align = '^'
width = 10
f'{"hi":{align}{width}}' # ' hi '
4. 多行f-string(3.12之前使用字符串拼接)
# Python 3.12之前
f"""
Name: {name}
Age: {age}
"""
Python 3.12重要改进
- 允许反斜杠:f-string内允许使用反斜杠(之前会报错)
- 允许多行表达式:f-string内可写多行lambda
- 允许注释:表达式中可使用
#注释 - 嵌套引号更灵活:单引号可嵌套双引号,反之亦然
性能
f-string在编译期转换为字符串构建操作(FORMAT_VALUE字节码),比str.format()快约2-3倍,因为格式表达式在编译时解析。