作者选择了 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编程有熟悉,您可以查看这些教程以获取必要的背景信息:
在 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系列。