如何使用 f-strings 在 Python 3 中创建字符串

作者选择了 COVID-19 救援基金作为 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字符串来动态创建字符串。

前提条件

要充分利用本教程,建议您对Python编程有熟悉,您可以查看这些教程以获取必要的背景信息:

如何在Python中编码 3

在 f 字符串中使用变量

程序通常需要将变量替换为字符串。Python的f字符串为我们提供了一个方便的方式来做到这一点。

1ocean_description = "deep blue"
2print(f"The ocean is {ocean_description} today")

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

1[secondary_label Output]
2The ocean is deep blue today

首先,我们将字符串深蓝绑定到名为ocean_description的变量中,在下一行中,我们通过先注入字符串的f来激活 f 字符串的格式化。

在 f 字符串中使用任意表达式

在上一节中,我们学到了如何将变量代替为f字符串。 f字符串还允许任意Python表达式的代替:

1print(f"1 + 1 = {1 + 1}")

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

1[secondary_label Output]
21 + 1 = 2

在本示例中,我们再次通过在字符串上添加前缀f来激活 f-string 格式化。在字符串中,我们包括一个有效的 Python 表达式,即1 + 1

几乎任何有效的 Python 表达式都可以在 f 字符串中使用,在下一个例子中,我们将展示 f 字符串中的字典值:

1ocean_dict = {"shark": "fish"}
2print(f"A shark is a kind of {ocean_dict['shark']}")

我们将收到如下结果:

1[secondary_label Output]
2A shark is a kind of fish

在第一行中,我们定义了一个单一的键/值对的字典:键鲨鱼被绘制到值。在下一行中,我们将表达式ocean_dict嵌入到字符{}中的一个f字符串中。

包括对象的复制

默认情况下,f-strings 会强迫包含的 Python 对象的字符串,以便对象可以成为最终字符串的一部分。默认情况下,Python 使用对象定义的 __str__ 方法来强迫它们的字符串。

有时在生成的字符串中使用对象的替代表示是有帮助的. f 字符串包含一个指令,允许 Python 对象的 repr 被包含在最终输出中. Python 对象的'repr' 是给定的 Python 对象的调试描述。

让我们来考虑一个例子来更清楚地区分 __str__repr. 为了在变量上调用 repr,我们将 !r 添加到表达式的末尾:

1from datetime import datetime
2
3now = datetime.now()
4print(f"{now}")
5print(f"{now!r}")

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

1[secondary_label Output]
22020-08-22 18:23:22.233108
3datetime.datetime(2020, 8, 22, 18, 23, 22, 233108)

<$>[注] 注: 通常,您的输出将包含与计算机上的当前时间相关的文本。

在本示例中,我们使用 datetime 模块来获取代表当前时间的对象,并将其绑定到名为 now 的变量。

在第二个例子中,我们将!r修改器添加到嵌入在f字符串中的表达式的末尾。!r指示Python在现在上调用 `repr来生成一个字符串表示。

使用 Specs 格式

f-strings 提供格式 spec 修改器,以便对输出字符串进行额外的控制. 这些格式 spec 修改器以 : 为前缀,例如:

1{expression:format_spec}

百分比修改器是一个可用的修改器的例子:

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

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

1[secondary_label Output]
218.1%

首先,我们将 decimal_value 绑定到 0.1812(结果是 18.12 / 100.0)。 然后,我们使用 f 字符串来打印 decimal_value 作为百分比。 : 开始格式规格部分。 .1 表示我们希望以 1 个十分点的精度输出数字。 %' 是我们想要使用的格式规格类型。 %' 格式规格将数字乘以 100,并在输出中包含一个 %' 符号。 因此,最终输出是 18.12%' (0.1812 * 100' 圆到 1 个十分点,并且是一个 %' 符号)。

格式规格允许您做的不仅仅是打印百分比;它们本身是一个复杂的微型语言. 它们允许您,例如,包括围绕一个表达式的贴纸字符或打印数字在科学标注。

您可以使用 Python 文档的此部分(https://docs.python.org/3/library/string.html#format-specification-mini-language)来了解有关 Python 可用的格式规格的更多信息。

处理特殊人物

正如我们所看到的,{}字符在f字符串中具有特殊的含义。如果我们想打印一个字面上的{}字符,我们需要通过添加额外的{}字符来逃避它们。

1print(f"{{}}")

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

1[secondary_label Output]
2{}

为了打印一个字面{},我们需要翻倍{},因为这些字符通常具有特殊的含义。

结论

在这个教程中,你已经学会了如何将变量和表达式替换为f字符串,使用类型转换指标,并使用f字符串逃避特殊字符。

字符串模块揭示了我们在本教程中没有涵盖的其他类和实用程序,现在你有一个基线,你可以使用字符串模块的文档(https://docs.python.org/3/library/string.html)来了解更多关于其他可用的类和实用程序。

此外,要了解更多关于 Python 的信息,请参阅我们的 Python 内容页面或我们的 How To Code in Python 3系列。

Published At
Categories with 技术
comments powered by Disqus