python中f-string详解
在 Python 3.6 及以上版本中引入的 f-string(格式化字符串字面值)是一种简洁、高效的字符串格式化方式,相比传统的 %
格式化和 str.format()
方法,它更直观且性能更好。
一、基本语法
f-string 以 f
或 F
为前缀,字符串中通过 {}
(花括号)包裹变量或表达式,Python 会自动计算并替换为对应的值。
name = "Alice"
age = 30# 基本用法:直接嵌入变量
print(f"姓名:{name},年龄:{age}") # 输出:姓名:Alice,年龄:30# 大小写前缀均可
print(F"姓名:{name},年龄:{age}") # 输出同上
二、核心特性
1. 直接嵌入表达式
f-string 支持在 {}
中写入任意 Python 表达式,包括算术运算、函数调用、三目运算等,Python 会实时计算结果并格式化。
x = 10
y = 20# 算术运算
print(f"{x} + {y} = {x + y}") # 输出:10 + 20 = 30# 函数调用
def greet(name):return f"Hello, {name}!"
print(f"问候:{greet('Bob')}") # 输出:问候:Hello, Bob!# 三目运算
print(f"结果:{x if x > y else y}") # 输出:结果:20
2. 嵌套使用
f-string 可以嵌套,即 {}
中可以包含另一个 f-string 或格式化表达式。
user = {"name": "Charlie", "age": 25}
print(f"用户信息:{f'姓名:{user["name"]},年龄:{user["age"]}'}")
# 输出:用户信息:姓名:Charlie,年龄:25
3. 转义字符
- 若需在字符串中显示
{
或}
,需用双写的{{
或}}
转义。 - 其他转义字符(如
\n
、\t
)仍按常规方式使用。
price = 99.9
print(f"价格:{{{price}}} 元") # 输出:价格:{99.9} 元
print(f"第一行\n第二行") # 输出两行文本(带换行)
4. 格式化控制
通过在 {}
中添加 :
后缀,可以指定数值精度、对齐方式、类型转换等格式化规则,语法与 str.format()
一致。
num = 123.456789# 控制小数位数(保留2位)
print(f"数值:{num:.2f}") # 输出:数值:123.46# 整数补零(总长度5位,不足补零)
print(f"编号:{12:05d}") # 输出:编号:00012# 百分比格式(乘以100并显示%)
print(f"百分比:{0.75:.0%}") # 输出:百分比:75%# 对齐方式(左对齐,总长度10位)
print(f"左对齐:{name:<10}结束") # 输出:左对齐:Alice 结束
5. 变量名和表达式的字符串表示
使用 !r
可以获取变量或表达式的 repr()
结果(带引号的字符串表示),!s
则获取 str()
结果(默认行为)。
text = "hello"
print(f"str: {text!s}, repr: {text!r}")
# 输出:str: hello, repr: 'hello'
三、优势总结
简洁直观:变量直接嵌入字符串,无需像
%
或str.format()
那样维护占位符与变量的对应关系。# 对比传统方式 print("姓名:%s,年龄:%d" % (name, age)) # %格式化 print("姓名:{},年龄:{}".format(name, age)) # str.format() print(f"姓名:{name},年龄:{age}") # f-string(最简洁)
性能更好:f-string 在编译时解析,比
str.format()
执行速度更快。功能强大:支持所有 Python 表达式,无需额外拼接字符串。
四、注意事项
引号冲突:若表达式中包含与外层相同的引号,需用不同类型的引号(如外层用双引号,内层用单引号)。
print(f'姓名:{name},句子:"Hello"') # 正确
不能包含反斜杠:
{}
中的表达式不能直接包含反斜杠,需提前定义变量。# 错误写法 # print(f"路径:{C:\Users}")# 正确写法 path = r"C:\Users" print(f"路径:{path}")
版本限制:仅 Python 3.6+ 支持,低版本需使用其他格式化方式。
f-string 是 Python 中推荐的字符串格式化方式,尤其适合需要动态拼接变量或表达式的场景,既提高了代码可读性,又保证了性能。