Python 中的 F 字符串

2025年1月11日 | 阅读 6 分钟

在本教程中,我们将学习字符串格式化机制。f-string 是格式化字符串的最佳方式。字符串的格式化风格使字符串更具可读性、更简洁,并且更不容易出错。它也比其他方式更快。

在深入研究这个主题之前,我们将首先回顾一下什么是 f-string 以及在 f-string 之前使用的技术。

什么是 F-string?

Python 中的 f-string(格式化字符串字面量)是一种使用大括号 {} 在字符串字面量中嵌入表达式的方法。f-string 引入于 Python 3.6,它提供了一种简洁易读的方式,可以在字符串中包含 Python 表达式的值。

f-string 的主要特点

  1. 嵌入表达式:您可以在 f-string 中的大括号 {} 内嵌入任何有效的 Python 表达式。
  2. 改进的可读性:与 str.format() 或 % 运算符等其他字符串格式化方法相比,f-string 更具可读性和简洁性。
  3. 高效:f-string 比其他字符串格式化方法更快,因为它们是在运行时进行评估的。

Python 中的旧字符串格式化

有两种主要的字符串格式化方法:% - 格式化和 str.format()。但这两种方法都有一些局限性。让我们简要介绍一下这些方法。

1.% - 格式化

Python 中旧的字符串格式化是指使用 % 运算符,这类似于 C 语言中的 printf 风格格式化。这种方法在很大程度上已被 str.format() 和 f-strings 等更现代的技术取代,但它仍然被广泛使用和理解。

"此处描述的格式化操作表现出各种怪癖,导致一些常见错误(例如无法正确显示元组和字典)。

使用较新的格式化字符串字面量或 str.format() 接口有助于避免这些错误。" - 官方文档

如何使用 % - 格式化

我们可以使用 %-运算符执行内置操作。让我们通过以下示例来理解。

输出

Hello Michel

我们也可以使用元组来存储多个变量。让我们看以下示例。

输出

Hello Sharma You are 24.

为什么不推荐 %-格式化

因为随着变量的增加和字符串变长,我们的代码可读性大大降低。代码看起来很混乱。让我们看以下示例。

示例 -

输出

Hello, Steve Rogers. Your age is 70. You are a Superhero. You were a member of Marvel.

正如我们在上面的代码中可以看到的,代码变得难以阅读且容易出错。这就是为什么这种字符串格式化方式不好。

2.str.format() 方法

Python 中的 str.format() 方法是一种比旧的 % 运算符更灵活、更强大的字符串格式化技术。str.format() 引入于 Python 2.7 和 3.0,它允许更复杂、更易读的字符串格式化。

如何使用 str.format()

它是对 %-格式化的改进。它就像在对象上调用一个普通的内置函数,该对象被转换为字符串。

让我们看下面的例子。

示例 -

使用变量

访问字典元素

输出

Hello Peter, You are 17

为什么不推荐 str.format() 方法?

str.format() 比 %-format 方法效率更高,但在处理多个参数时仍然可能非常冗长。

F-string 方法

它是 PEP 498 引入的一种新的字符串格式化机制。它也称为字面字符串插值,或者更常见的称为 F-strings (字符串字面量前带有 f 字符)。该机制的主要重点是使插值更容易。

f-string 方法在 Python 3.6 中引入,提供了一种使用大括号 {} 在字符串字面量中嵌入表达式的简洁高效的方法。f-string(格式化字符串字面量)提高了可读性,并且比其他字符串格式化方法更快。

当我们用字母 'F' 作为字符串的前缀时,该字符串本身就变成了 f-string。f-string 的格式化方式与 str.format() 方法非常相似。F-string 提供了一种在字符串字面量中嵌入 Python 表达式以进行格式化的便捷方式。

示例 -

输出

Hello, My name is Tushar and I'm 28 years old.

在上面的代码中,我们使用了 f-string 来格式化字符串。它在运行时进行评估;我们可以将所有有效的 Python 表达式放入其中。

我们可以在单个语句中使用它。

输出

60

但是,我们也可以在函数中使用它。

输出

Sachin Tendulkar is great

f-string 也可以与类对象一起使用。让我们通过以下示例来理解。

示例 -

输出

Keenu Reevs's superhit movie is Matrix.

解释 -

在上面的代码中,我们使用了 __str__() 和 __repr__() 来将对象表示为字符串。所以我们需要在类定义中包含至少一种方法。f-string 将使用 __str__() 方法;我们也可以通过包含转换标志 !r 来使用 __repr__()。

输出

Keenu Reevs's superhit movie is Matrix.
Keenu Reevs Matrix Superhit

字典中的 F-string

我们在 f-string 中处理字典键时需要格外小心。使用字典键和 f-string 需要不同的引号。让我们通过以下示例来理解。

示例 -

输出

John is 19 years old.

对于字典,以下方法是不允许的。

示例 -

输出

File "", line 2
    print(f'{detail['name']} is {detail['age']} years old.')
                     ^
SyntaxError: invalid syntax

正如我们在上面的代码中可以看到的,我们将双引号改为了单引号,这引发了一个错误。

速度

采用这种格式风格的原因是它的速度。f-string 在运行时进行评估,而不是常量值。它使用最少的语法在字符串字面量中嵌入表达式。它之所以快,是因为它是在运行时进行评估的,而不是常量值。

让我们看以下字符串比较。

示例 - 1

输出

0.0022497819736599922

示例 - 2

输出

0.0025783719611354172

示例 - 3

输出

0.0019360429723747075

正如我们所观察到的,f-string 位于列表的顶部。

大括号

要使代码中出现大括号,您应该使用双引号,如下所示。让我们通过以下示例来理解。

示例 -

输出

{70 + 40}

如果我们使用三重括号,它将在我们的字符串中显示单个括号。让我们通过以下示例来理解。

示例 -

输出

{94}

如果我们使用多于三重括号,我们可以显示更多的括号。

示例 -

输出

{{70 + 4}}

反斜杠

我们可以在 f-string 的字符串部分使用反斜杠转义符。但是,我们不能在 f-string 的表达式部分使用反斜杠进行转义。让我们通过以下示例来理解。

示例 -

输出

SyntaxError: f-string expression part cannot include a backslash

内联注释

我们不能在表达式中包含 # 符号。这会引发语法错误。让我们通过以下示例来理解。

示例 -

输出

SyntaxError: f-string expression part cannot include '#'

结论

我们可以使用这三种方法中的任何一种,但 f-string 方法提供了更简洁、可读性更强、更方便的方式。它更快,更不容易出错。我们已经解释了 f-string 几乎所有可能的情况,以及为什么应该在编程中考虑这种方法。


下一个主题Brython 如何工作