pin_drop当前位置:知识文库 ❯ 图文
Python f-string格式化
概述
f-string(格式化字符串字面量)是Python 3.6引入的字符串格式化方式,以f或F前缀标识,在字符串中使用{}嵌入表达式。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}")数字格式化
代码示例
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对比
同一效果的三种写法
代码示例
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。
本文涉及AI创作
内容由AI创作,请仔细甄别