如何在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 对象(例如:listsdictionaries、整数、浮点数)包括预定义的 __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 解释器的调试信息。 在这种情况下,我们会收到有关绑定到 nowdatetime 对象的详细信息。

使用格式规范

f-strings 提供格式规范修饰符,用于额外控制输出的字符串。 这些格式规范修饰符以 : 为前缀,例如:

{expression:format_spec}

百分比修饰符是一种可用修饰符的示例:

decimal_value = 18.12 / 100.0
print(f"{decimal_value:.1%}")

如果我们运行此代码,我们将收到如下输出:

Output18.1%

首先,我们将 decimal_value 绑定到 0.181218.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 中编码 系列。