如何使用 Python 的 f-string 进行字符串格式化
off999 2025-06-08 23:22 24 浏览 0 评论
Python 中的字符串格式化曾经有点麻烦。必须在 % 运算符、str.format() 或字符串连接的组合之间进行选择,才能将变量注入字符串中。幸运的是,Python 3.6 引入了 f-strings(格式化字符串文字),这是一种使代码更简洁、更具可读性和更高效的强大方法。
什么是 f 字符串?
f-string 是前缀为字母 f 的字符串文本,允许在大括号 {} 内包含表达式,这些表达式在运行时进行计算。这使得包含变量值、执行计算甚至调用函数变得容易 - 所有这些都直接在字符串中完成。
下面是一个基本示例:
name = "Alice"
age = 30
message = f"My name is {name} and I am {age} years old."
print(message)输出:
My name is Alice and I am 30 years old.f 字符串的美妙之处在于它们的简单性:您只需在开始引号前加上一个 f,然后使用 {} 将值直接插入到字符串中。
f 字符串的优点
1. 可读性
与旧的格式设置方法相比,F 字符串更具可读性,因此很容易看到每个变量或表达式的去向。
2. 简洁
F 字符串消除了对 str.format() 等详细方法调用的需要。您的字符串更简洁,代码更短。
3. 灵活性
可以在 {} 中嵌入任何有效的 Python 表达式,包括算术运算或函数调用。
4. 类型提示集成
使用类型提示时,f-strings 可以帮助确保变量的格式与其预期类型一致:
def greet(user: str) -> str:
return f"Hello, {user}!"
print(greet("Alice"))类型提示与 f 字符串相结合,有助于使代码自文档化且可读。
使用 f 字符串的示例
1. 使用 f 字符串格式化变量
假设有一些表示产品的变量:
product = "Laptop"
price = 999.99
formatted = f"The {product} costs ${price:.2f}."
print(formatted)输出:
The Laptop costs $999.99.此处,:.2f 指定价格的格式应为小数点后两位 — 非常适合显示货币值。
2. 在 f 字符串中执行计算
您可以直接在 f 字符串中包含计算:
length = 5
width = 3
area_message = f"The area of the rectangle is {length * width} square units."
print(area_message)输出:
The area of the rectangle is 15 square units.3. 使用格式说明符
F 字符串支持各种格式说明符来控制输出:
# Right-aligned text with padding
print(f"|{'Hello':>10}|")
# Left-aligned text
print(f"|{'World':<10}|")
# Center-aligned text
print(f"|{'Center':^10}|")
# Formatting numbers
num = 1234.56789
print(f"Number with commas: {num:,.2f}")
print(f"Percentage: {0.756:.1%}")输出:
| Hello|
|World |
| Center |
Number with commas: 1,234.57
Percentage: 75.6%4. 使用 f 字符串进行调试
使用 {var=} 语法进行快速调试:
x = 42
print(f"{x=}")输出:
x=42高级功能
1. 多行 f 字符串
对于较长的字符串,请使用多行 f 字符串以获得更好的可读性:
name = "Alice"
city = "Wonderland"
message = (
f"Hello, {name}!\n"
f"Welcome to {city}. We hope you enjoy your stay."
)
print(message)2. 处理特殊字符
如果你需要在 f 字符串中包含大括号 {},只需将它们加倍即可:
result = f"To include curly braces, use double braces: {{ and }}."
print(result)输出:
To include curly braces, use double braces: { and }.与模板字符串的比较
虽然 f-strings 通常更快、可读性更强,但 string 模块中的 Python 模板字符串在处理不受信任的 input 时提供了更好的安全性。
from string import Template
user_input = "Alice"
template = Template("Hello, $name!")
message = template.substitute(name=user_input)
print(message)模板字符串更安全,因为它们只允许变量替换,不支持任意表达式。在处理用户生成的内容以防止注入攻击时,这可能是一个显著的优势。
安全注意事项
F 字符串允许任意表达式,如果您直接合并用户输入,这可能会有风险:
user_input = "__import__('os').system('ls')"
# Dangerous! Avoid using f-strings with untrusted input:
# print(f"User input: {user_input}")相反,在将用户输入包含在 f 字符串中之前,请使用 Template strings 或对其进行清理,以避免潜在的安全漏洞。
性能比较
f 弦的主要优点之一是它们的性能。让我们将 f 字符串与 % 运算符、str.format() 和模板字符串进行比较:
import timeit
name = "Alice"
age = 30
f_string_time = timeit.timeit("f'{name} is {age} years old'", globals=globals(), number=1000000)
format_time = timeit.timeit("'{} is {} years old'.format(name, age)", globals=globals(), number=1000000)
percent_time = timeit.timeit("'%s is %d years old' % (name, age)", globals=globals(), number=1000000)
template_time = timeit.timeit("Template('$name is $age years old').substitute(name=name, age=age)",
globals=globals(), number=1000000)
print(f"f-string: {f_string_time:.6f}s, str.format(): {format_time:.6f}s, %-formatting: {percent_time:.6f}s, Template: {template_time:.6f}s")典型输出:
f-string: 0.085123s, str.format(): 0.121456s, %-formatting: 0.130567s, Template: 0.155789s结论:f 字符串是最快的,但如果安全是一个问题(例如,处理用户输入),请考虑使用模板字符串。
要避免的陷阱
1. 仅限 Python 3.6+
F 字符串仅在 Python 3.6 及更高版本中可用。如果您使用的是旧版本,则需要使用其他格式设置方法。
2. 保持表达式简单
避免在 {} 中使用过于复杂的表达式以提高可读性:
# Instead of this:
formatted = f"The result is {((10 ** 2 + 5) / 3):.2f}"
# Do this:
result = (10 ** 2 + 5) / 3
formatted = f"The result is {result:.2f}"3. 谨慎对待用户输入
切勿直接将 f 字符串与不受信任的输入一起使用。使用 Template strings 以获得更安全的方法。
结论
F 字符串提供了一种现代、可读且简洁的方式来在 Python 中格式化字符串。它们功能强大、灵活且性能卓越,是大多数使用案例的理想选择。但是,对于涉及用户输入的方案,请考虑使用 Template strings 以避免安全问题。
相关推荐
- 如何将系统还原(如何将系统还原到以前版本)
-
你好!依次单击“开始”/“程序”/“附件”/“系统工具”/“系统还原”命令,在其后弹出的系统还原设置向导界面中,将“恢复我的计算机到一个较早的时间”项目选中,然后单击“下一步”按钮;在其后弹出的系统...
- u盘格式化分配单元大小多少合适
-
1、如果只是存放歌曲类或者是文档等小文件,就可以把单个格设置的小一些,比如16K,如果是大容量的电影可以设置为128K,不过一般只需要设置为【默认配置大小】就可以了; 2、U盘存储文件就是按照这个分...
- 修改自家wifi密码管理员密码
-
修改WiFi密码和管理员密码有两种方式:通过路由器管理页面和通过手机APP。1.通过路由器管理页面修改密码:步骤1:连接路由器,打开浏览器输入路由器的IP地址(一般为192.168.1....
- 超级硬盘数据恢复软件破解(超级硬盘数据恢复软件7.0)
-
这个慢很正常。因为硬盘恢复数据之前要对整个分区扫描一次,找到文件后,恢复的时候又要扫描一次。如果分区的容易很大,扫描会很耗时的。修复工具软件版本:嗨格式数据恢复大师2.8.1433.405,佳...
- win11如何从edge恢复到ie(edge怎么变回ie)
-
如果您使用的是Windows10操作系统,在Windows的默认浏览器中使用Edge时,系统将默认将许多链接打开到Edge浏览器。如果您想要改回IE浏览器打开链接,按照以下步骤操作:1.打开IE浏...
- uefi引导修复怎么用(uefi引导修复没反应)
-
biosuefi引导修复工具使用方法1、首先,在电脑关机状态下将pe启动盘插在电脑上,并在开机的时候进入pe系统,然后选择第一项回车进入:2、然后,进入到pe系统桌面之后,双击桌面上的分区工具:3、进...
- 360怎么升级win7系统(360如何升级win10)
-
像这种情况用以下介绍的方法和步骤就可以解决:1、打开电脑桌面找到“360安全卫士”软件,并打开;2、找到“360安全卫士”右下角工具拓展工具箭头;3、点击进入,选择“全部工具”;4、在全部工具页...
- 电脑分辨率怎么设置(电脑分辨率怎么调)
-
操作步骤/方法【Windows系统】END【Mac系统】第1步,选择系统偏好设置在电脑桌面,点击苹果图标并选择系统偏好设置。在电脑桌面,点击苹果图标并选择系统偏好设置。第2步,点击显示器在系统偏好设置...
- win7输入法切换不了(win7输入法切换没反应)
-
输入法无法切换解决方法: 1、点击屏幕左下角的“开始图标”并在弹出对话框中选择“控制面板”选项并打开; 2、进入控制面板页面后将查看方式...
- 笔记本win10怎么改win7系统(笔记本win10改win7bios设置)
-
请注意,将Win10系统改为Win7系统并不是一个可行的或推荐的操作。在执行此操作之前,请确保已经获得必要的权限和授权,以及了解所涉及的风险和可能的问题。如果仍然想要执行此操作,以下是一些步骤...
- qq群发器官网(qq群发器安卓免费版下载)
-
但是没有群呢?那怎么发?1、注意只有在以上新版本的手机QQ消息中,才会有群发祝福的功能推送。此功能笔者目前没有找到其他地方可以进入的入口。2、进入之外选择需要接收新年祝福的好友。既然是群发,则可以尽量...
- tp路由器密码忘记了怎么找回
-
如果您忘记了TP-LINK路由器的密码,可以通过以下步骤来重置它:1.找到路由器的重置按钮,通常位于路由器背面或底部。2.使用针或其他细长的物品,按住重置按钮约10秒钟,直到路由器指示灯开始闪烁,...
- 大白菜系统官网win7镜像(大白菜系统镜像怎么做)
-
1、制作好大白菜U盘pe启动盘之后,将windows7系统原版iso镜像直接复制到大白菜U盘根目录中;2、在需要装windows7原版系统的电脑上插入U盘,重启后不停按F12或F11或Esc等按键,在...
- 五笔字根表打字练习(五笔字根表口诀速记与理解)
-
五笔字根表口诀如下:1区横起笔11G 王旁青头五一提12F 土士二干十寸雨13D 大三肆头古石厂14S 木丁西边要无女15A 工戈草头右框七2区竖起笔21H 目止具头卜虎皮22J 日曰两...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
