如何在Python3中使用f字符串创建字符串
作者选择了 COVID-19 Relief Fund 作为 Write for DOnations 计划的一部分来接受捐赠。
介绍
Python 字符串 是可变长度的字符和符号序列。 字符串允许您的程序操作和跟踪文本,并将该文本显示给您的用户。
Python 包含多种构建字符串的方法,包括 %
格式样式和 str.format()
方法。 str.format()
方法比 %
格式样式更新,在 How To Use String Formatters in Python 3 中有详细说明。 f-string 格式化是 Python 中最新的字符串格式化方法,它提供了便利,例如在字符串中使用表达式,这些在 %
格式化样式或 str.format()
方法中都不可用.
在本教程中,您将学习如何使用 Python 3 的 f-strings 动态创建字符串。
先决条件
为了充分利用本教程,建议您熟悉 Python 3 中的编程。 您可以查看这些教程以获取必要的背景信息:
在 f 字符串中使用变量
程序通常需要将变量替换为字符串。 Python 的 f-strings 为我们提供了一种方便的方式来执行此操作。 让我们考虑一个例子:
ocean_description = "deep blue" print(f"The ocean is {ocean_description} today")
如果我们运行此代码,我们将收到如下输出:
OutputThe ocean is deep blue today
首先,我们将字符串 deep blue
绑定到一个名为 ocean_description
的变量。 在下一行,我们通过在字符串前面加上 f
来激活 f 字符串格式。 f 字符串将 {}
字符内的表达式解释为 Python。 因此,通过说 {ocean_description}
,我们指示 Python 将 ocean_description
变量的值插入到我们的字符串中。 然后打印结果字符串:The ocean is deep blue today
。
在 f 字符串中使用任意表达式
在上一节中,我们学习了如何将变量替换为 f 字符串。 f-strings 还允许替换任意 Python 表达式:
print(f"1 + 1 = {1 + 1}")
如果我们运行此代码,我们将收到如下输出:
Output1 + 1 = 2
在此示例中,我们通过在字符串中包含 f
前缀再次激活 f 字符串格式。 在 {}
字符内,我们包含一个有效的 Python 表达式 1 + 1
。 该表达式的最终结果是 2
,它包含在打印的最终字符串中。
几乎任何有效的 Python 表达式都可以在 f 字符串中使用。 在下一个示例中,我们将演示访问 f 字符串中的字典值:
ocean_dict = {"shark": "fish"} print(f"A shark is a kind of {ocean_dict['shark']}")
我们将收到如下输出:
OutputA shark is a kind of fish
在第一行,我们定义了一个具有单个键/值对的字典:键 shark
映射到值 fish
。 在下一行,我们将表达式 ocean_dict['shark']
嵌入到 f 字符串的 {}
字符中。 该嵌入表达式的结果是 fish
,它包含在输出中。
包括对象的repr
默认情况下,f-strings 会将包含的 Python 对象强制转换为字符串,以便这些对象可以成为最终字符串的一部分。 默认情况下,Python 使用对象上定义的 __str__ 方法 将它们强制转换为字符串。 内置 Python 对象(例如:lists、dictionaries、整数、浮点数)包括预定义的 __str__
方法,以便强制过程无缝进行。
有时在生成的字符串中使用对象的替代表示会很有帮助。 f-strings 包含一个指令,允许 Python 对象的 repr 包含在最终输出中。 Python 对象的 repr
是给定 Python 对象的调试描述。
让我们考虑一个例子来更清楚地区分 __str__
和 repr
。 要在变量上调用 repr
,我们将 !r
添加到表达式的末尾:
from datetime import datetime now = datetime.now() print(f"{now}") print(f"{now!r}")
如果我们运行此代码,我们会收到如下输出:
Output2020-08-22 18:23:22.233108 datetime.datetime(2020, 8, 22, 18, 23, 22, 233108)
注意: 通常,您的输出将包含与计算机上当前时间相关的文本。 您计算机上的时间将不同于示例输出中显示的时间。
在这个例子中,我们使用 datetime 模块 来获取一个表示当前时间的对象并将它绑定到一个名为 now
的变量。 接下来,我们使用两个不同的 f 字符串打印出 now
两次。 在第一个 f 字符串中,我们不包含任何额外的修饰符,因此 Python 使用当前时间的 __str__
表示。
在第二个示例中,我们将 !r
修饰符添加到嵌入在 f 字符串中的表达式的末尾。 !r
指示 Python 在 now
上调用 repr 以生成字符串表示。 通常,repr
打印更适合交互式 Python 解释器的调试信息。 在这种情况下,我们会收到有关绑定到 now
的 datetime
对象的详细信息。
使用格式规范
f-strings 提供格式规范修饰符,用于额外控制输出的字符串。 这些格式规范修饰符以 :
为前缀,例如:
{expression:format_spec}
百分比修饰符是一种可用修饰符的示例:
decimal_value = 18.12 / 100.0 print(f"{decimal_value:.1%}")
如果我们运行此代码,我们将收到如下输出:
Output18.1%
首先,我们将 decimal_value
绑定到 0.1812
(18.12 / 100.0
的结果)。 然后,我们使用 f 字符串将 decimal_value
打印为百分比。 :
开始格式规范部分。 .1
表示我们希望输出精度为小数点后 1 位的数字。 %
是我们想要使用的格式规范类型。 %
格式规范将数字乘以 100,并在输出中包含 %
符号。 因此,最终输出为 18.12%
(0.1812 * 100
舍入到小数点后 1 位,以及一个 %
符号)。
格式规范允许您做的不仅仅是打印百分比; 它们本身就是一种复杂的微型语言。 例如,它们允许您在表达式周围包含填充字符或以科学记数法打印数字。
您可以使用 Python 文档的 这部分 来了解有关 Python 可用格式规范的更多信息。
处理特殊字符
正如我们所见,{}
字符在 f 字符串中具有特殊含义。 如果我们想打印文字 {
或 }
字符,我们需要通过添加额外的 {
或 }
字符来转义它们。 考虑以下示例:
print(f"{{}}")
如果我们运行此代码,我们将收到如下输出:
Output{}
为了打印出文字 {}
,我们需要将 {
和 }
都加倍,因为这些字符通常具有特殊含义。
结论
f-strings 是一种在 Python 中动态且简洁地构建字符串的强大而便捷的方法。 在本教程中,您学习了如何将变量和表达式替换为 f 字符串、使用类型转换说明符以及使用 f 字符串转义特殊字符。
string
模块公开了我们在本教程中没有介绍的其他类和实用程序。 现在您有了基线,您可以使用 字符串模块的文档 了解更多关于其他可用类和实用程序的信息。
此外,要了解有关 Python 的更多信息,请查看我们的 Python 内容页面 或我们的 如何在 Python 3 中编码 系列。