Python中的f-字符串(格式化字符串字面量)是一种高效且易用的字符串格式化方法,通过f前缀和花括号{}嵌入表达式实现动态内容生成。以下是其核心用法及高级技巧的总结:
1. 基础用法- 语法:在字符串前加f前缀,表达式用{}包裹。name = "Alice"age = 30print(f"My name is {name} and I am {age} years old.")
2. 调试技巧- 变量名与值输出:Python 3.8+支持{x=}语法,直接输出变量名和值。x = 10y = 20print(f"x = {x=}, y = {y=}") # 输出:x = x=10, y = y=20
- 复杂表达式调试:将表达式拆分为多步,或使用调试器(如pdb)逐步检查。
3. 性能优势- 编译优化:f-字符串在运行时被编译为优化代码,通常比%格式化和.format()更快。import timeitname = "Alice"age = 30def test_percent(): return "My name is %s and I am %d" % (name, age)def test_format(): return "My name is {} and I am {}".format(name, age)def test_fstring(): return f"My name is {name} and I am {age}"print("Percent:", timeit.timeit(test_percent, number=100000))print("Format:", timeit.timeit(test_format, number=100000))print("F-string:", timeit.timeit(test_fstring, number=100000))结果示例(具体值因环境而异):Percent: 0.045Format: 0.052F-string: 0.030
4. 特殊字符处理- 字面量花括号:用双花括号{{}}表示。print(f"This is a literal curly brace: {{}}") # 输出:This is a literal curly brace: {}
- 转义字符:反斜杠用于转义(如n换行、t制表符)。
5. 高级格式化选项- 指定精度:用:.nf控制浮点数小数位数。pi = 3.1415926535print(f"Pi with 2 decimal places: {pi:.2f}") # 输出:3.14
- 指定宽度与对齐:
:{width}:固定字段宽度,默认右对齐。
:<、:>、:^:左对齐、右对齐、居中对齐。
number = 123text = "Hello"print(f"Number with width 5: {number:5}") # 输出:" 123"(右对齐)print(f"Left aligned: {text:<10}") # 输出:"Hello "print(f"Right aligned: {text:>10}") # 输出:" Hello"print(f"Center aligned: {text:^10}") # 输出:" Hello " - 填充字符:在对齐符号前指定字符(如0填充)。print(f"Padded with zeros: {number:05}") # 输出:"00123"
- 逗号分隔符:用,添加千位分隔符。population = 1234567890print(f"Population with commas: {population:,}") # 输出:"1,234,567,890"
6. 局限性- 不支持原始字符串:无法直接使用fr"...",需先定义变量再嵌入。
- 复杂表达式调试困难:建议拆分表达式或使用调试器。
- 版本限制:仅适用于Python 3.6+,旧版本需升级或使用替代方法。
总结f-字符串通过简洁的语法和强大的功能(如动态求值、调试支持、高性能、高级格式化),成为Python字符串格式化的首选方案。掌握其技巧可显著提升代码可读性和执行效率,但需注意版本兼容性和复杂表达式处理。