pin_drop当前位置:知识文库 ❯ 图文

Python f-string格式化

概述

f-string(格式化字符串字面量)是Python 3.6引入的字符串格式化方式,以fF前缀标识,在字符串中使用{}嵌入表达式。f-string兼具简洁性和高性能,是目前Python推荐的字符串格式化方式。本篇教程将全面介绍f-string的各种用法,包括基本用法、表达式、调试用法和格式规范等。


基本用法

在字符串前加f前缀,用{}包裹变量名即可:

代码示例

name = "张三"
age = 25
print(f"姓名:{name},年龄:{age}岁")

city = "北京"
print(f"我来自{city}")

提示:f-string在运行时求值,{}中的内容是Python表达式,不是字符串。


表达式

{}中可以放置任意Python表达式,而不仅仅是变量名:

算术运算

代码示例

a, b = 10, 20
print(f"{a} + {b} = {a + b}")
print(f"{a} * {b} = {a * b}")
print(f"{a} 的平方是 {a ** 2}")

方法调用

代码示例

name = "python"
print(f"大写:{name.upper()}")
print(f"标题:{name.title()}")
print(f"长度:{len(name)}")

列表和字典访问

代码示例

fruits = ["苹果", "香蕉", "橙子"]
print(f"最喜欢的水果是{fruits[0]}")

person = {"name": "李四", "age": 30}
print(f"姓名:{person['name']},年龄:{person['age']}")

提示:在f-string中访问字典时,字典的键需要使用不同的引号(外层用双引号,内部用单引号,或反之)。

条件表达式

代码示例

score = 85
result = f"成绩:{'及格' if score >= 60 else '不及格'}"
print(result)

status = "在线"
print(f"状态:{'●' if status == '在线' else '○'}")

调用函数

{}中可以直接调用函数:

代码示例

def greet(name):
    return f"你好,{name}"

print(f"问候:{greet('王五')}")

import math
print(f"圆周率:{math.pi:.4f}")
print(f"2的10次方:{math.pow(2, 10):.0f}")

from datetime import datetime
print(f"当前时间:{datetime.now():%Y-%m-%d %H:%M:%S}")

调试用法(=)

Python 3.8引入了=说明符,可以同时输出变量名和值,非常适合调试:

代码示例

name = "Python"
version = 3.12
print(f"{name=}")
print(f"{version=}")
print(f"{name = }")
print(f"{version = }")

x = 100
print(f"{x * 2 = }")

输出:

代码示例

name='Python'
version=3.12
name = 'Python'
version = 3.12
x * 2 = 200

提示=调试用法会自动在输出中包含变量名和等号,省去了手动书写"name=" + str(name)的麻烦。


格式规范

f-string的格式规范与format()方法一致,语法为{表达式:格式规范}

填充与对齐

代码示例

print(f"{'Python':>10}")
print(f"{'Python':<10}")
print(f"{'Python':^10}")
print(f"{'Python':*^10}")
格式 含义 输出
{s:>10} 右对齐,宽度10 Python
{s:<10} 左对齐,宽度10 Python
{s:^10} 居中对齐,宽度10 Python
{s:*^10} 居中,用*填充 **Python**

数字格式化

代码示例

num = 3.14159
print(f"默认: {num}")
print(f"2位小数: {num:.2f}")
print(f"4位小数: {num:.4f}")
print(f"带符号: {num:+.2f}")
print(f"科学计数: {num:.2e}")

big_num = 1234567890
print(f"千位分隔: {big_num:,}")
print(f"百分比: {0.856:.2%}")

进制转换

代码示例

num = 255
print(f"二进制: {num:b}")
print(f"八进制: {num:o}")
print(f"十六进制: {num:x}")
print(f"十六进制: {num:X}")
print(f"带前缀二进制: {num:#b}")
print(f"带前缀十六进制: {num:#x}")

日期格式化

代码示例

from datetime import datetime

now = datetime.now()
print(f"日期: {now:%Y-%m-%d}")
print(f"时间: {now:%H:%M:%S}")
print(f"完整: {now:%Y年%m月%d日 %H:%M:%S}")
print(f"星期: {now:%A}")

与%和format对比

特性 %格式化 format() f-string
Python版本 全版本 2.6+ 3.6+
语法简洁度
表达式支持 不支持 有限 完全支持
调试用法 不支持 不支持 支持(3.8+)
性能
可读性
元组传参 需要 不需要 不需要

同一效果的三种写法

代码示例

name = "张三"
age = 25
score = 95.5

print("姓名:%s,年龄:%d,成绩:%.1f" % (name, age, score))
print("姓名:{},年龄:{},成绩:{:.1f}".format(name, age, score))
print(f"姓名:{name},年龄:{age},成绩:{score:.1f}")

提示:三种方式输出结果完全相同,但f-string的代码最简洁、最易读。


代码示例

综合运用f-string:

代码示例

from datetime import datetime

students = [
    {"name": "张三", "score": 85.5},
    {"name": "李四", "score": 92.3},
    {"name": "王五", "score": 67.8},
]

print(f"{'学生成绩单':=^30}")
print(f"{'姓名':<8}{'成绩':>8}{'等级':>6}")
print("-" * 24)

for s in students:
    grade = "A" if s["score"] >= 90 else "B" if s["score"] >= 80 else "C" if s["score"] >= 70 else "D"
    print(f"{s['name']:<8}{s['score']:>8.1f}{grade:>6}")

avg = sum(s["score"] for s in students) / len(students)
print(f"{'平均':<8}{avg:>8.1f}")

print(f"\n生成时间:{datetime.now():%Y-%m-%d %H:%M:%S}")

x, y = 10, 20
print(f"\n调试信息:{x=}, {y=}, {x+y=}")

注意事项

提示:f-string仅适用于Python 3.6及以上版本

提示{}中不能包含反斜杠\,如需使用换行符等,需先赋值给变量

提示:字典的键在f-string中需要使用不同类型的引号

提示=调试用法需要Python 3.8+

提示:f-string在定义时求值,不是在打印时求值

提示:不能在f-string的{}内使用注释


小结

本篇教程全面介绍了f-string的用法,包括基本变量嵌入、表达式运算、方法调用、函数调用、调试用法(=)、格式规范(对齐、数字、进制、日期)等。f-string是Python 3.6+推荐的格式化方式,语法简洁、性能优秀、可读性强,在实际开发中应优先使用。


练习题

练习1

使用f-string格式化输出一个商品信息表,包含商品名(左对齐,宽度10)、单价(右对齐,保留2位小数,宽度8)、库存(右对齐,宽度6),并使用=调试用法输出商品总数。

练习2

使用f-string将当前日期时间格式化为XXXX年XX月XX日 星期X XX:XX:XX的形式,并计算距离2025年1月1日还有多少天。

常见问题

f-string中的{}可以放什么内容?

f-string中的{}可以放置任意Python表达式,包括变量、算术运算、函数调用、方法调用、列表/字典访问、条件表达式等。这是f-string相比其他格式化方式最大的优势。

f-string的=调试用法怎么用?

在Python 3.8+中,可以在f-string的{}中使用=来同时输出变量名和值。例如f"{name=}"会输出"name='Python'",非常适合调试时快速查看变量值,省去了手动书写"变量名=" + str(变量)的麻烦。

f-string中可以包含反斜杠吗?

不可以。f-string的{}中不能直接包含反斜杠\(如换行符\n)。如果需要,应该先将包含反斜杠的表达式赋值给变量,再在f-string中引用该变量。

f-string和format()的性能差别大吗?

f-string的性能优于format(),因为f-string在运行时直接求值,而format()需要调用方法并解析格式字符串。在大量字符串格式化操作中,这种差异会更加明显。

如何在f-string中格式化日期时间?

使用datetime对象的格式规范,例如f"{now:%Y-%m-%d %H:%M:%S}"。%Y表示四位年份,%m表示月份,%d表示日期,%H表示小时,%M表示分钟,%S表示秒。

f-string中的字典键引号问题怎么解决?

在f-string中访问字典时,字典键的引号需要与f-string的外层引号不同。例如外层用双引号的f-string,字典键用单引号:f"姓名:{person['name']}"。

小贴士

f-string是Python 3.6引入的最强字符串格式化方式,它不仅语法简洁,而且性能最优。特别值得推荐的是Python 3.8的=调试用法,可以大幅简化调试代码。如果你的项目使用Python 3.6+,建议在所有字符串格式化场景中优先使用f-string。

标签: f-string 字符串格式化 表达式嵌入 调试用法 数字格式化 日期格式化 Python基础

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python format方法格式化 下一篇: Python字符串切片

poll相关推荐

作者头像 智能小晨 python

Python元组命名namedtuple

发布日期 2026-05-31
深入学习Python命名元组namedtuple,掌握字段访问、_make创建、_asdict转字典、_replace替换字段等核心方法。理解命名元组与普通元组的区别,写出更清晰易读的Python代码。
作者头像 智能小晨 python

Python元组解包

发布日期 2026-05-31
全面学习Python元组解包技巧,包括基本解包、星号扩展解包、嵌套解包、交换变量和函数多值返回。掌握优雅的Python赋值语法,让你的代码更简洁高效。
作者头像 智能小晨 python

Python元组index方法

发布日期 2026-05-31
深入学习Python元组index()方法,掌握元素索引查找技巧。了解index()语法、指定范围查找、安全查找方法和实际应用场景,避免ValueError异常,提升Python编程效率。
作者头像 智能小晨 python

Python元组count方法

发布日期 2026-05-31
深入学习Python元组count()方法,掌握元素出现次数统计技巧。了解count()语法、性能优化建议、嵌套元组统计和实际应用场景,配合练习题巩固所学知识。