F字符串在Python中的使用

F字符串在Python中的使用

在本教程中,我们将学习字符串格式化机制。F字符串是格式化字符串的最佳方式。字符串的格式化样式使字符串更易读、更简洁、更不容易出错。它也比其他方式更快。

在深入研究这个主题之前,我们首先讨论一下在F字符串出现之前使用的技术。

Python中的旧字符串格式化

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

1. % – 格式化

这是一种传统的字符串格式化方法,但是官方文档推荐使用其他方法,其中包含以下陈述。

“这里描述的格式化操作存在各种怪异行为,导致了一些常见的错误(例如无法正确显示元组和字典)。

使用较新的格式化字符串字面值或str.format()接口可以避免这些错误。” – 官方文档。

如何使用% – 格式化

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

student = "Michel"
"Hello, %s." % student

输出:

Hello Michel

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

name = "Sharma"
age = 24
"Hello, %s. You are %s." % (name, age)

输出:

Hello Sharma You are 24.

为什么不推荐使用“%”格式化

因为随着变量的增加和字符串的长度增加,我们的代码变得不太容易阅读。代码看起来很乱。让我们看下面的示例。

示例

first_name = "Steve"
last_name = "Rogers"
age = 70
profession = "Superhero"
group = "Marvel?
print(""Hello, %s %s. Your age is %s. You are a %s. You were a member of %s." %(first_name, last_name, age, profession)")

输出:

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

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

2. str.format() 方法

这是另一种在Python 2.6中引入的流行的格式化字符串的方式。让我们看看如何使用它。

如何使用 str.format()

它是对%-格式化的改进。它类似于在对象上调用的普通内置函数,并将该对象转换为字符串。

让我们看下面的示例。

示例

first_name = "Mathew"
last_name = "Zukerburg"
age = 45 
print("Hello, {}. You are {}.".format(name, age)")

为了在format()方法中访问字典元素,我们可以通过传递键值。

person = {'name': 'Peter', 'age': 17}
"Hello, {name}. You are {age}.".format(name=person['name'], age=person['age'])

输出:

Hello Peter, You are 17

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

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

F-string方法

这是由PEP 498引入的一种新的字符串格式化机制,也被称为字面字符串插值或更常用的F-strings。 (在字符串字面值之前加上f字符)。 这种机制的主要目的是使插值更加简便。

当我们以字母’F’为前缀时,字符串本身就变成了f-string。f-string可以像 str.format() 方法一样进行格式化。F-string提供了一种方便的方法,将Python表达式嵌入字符串字面值中进行格式化。

示例

# Python3 program introducing f-string
val = 'Geeks'
print(f"{val}for{val} is a portal for {val}.")
name = 'Tushar'
age = 23
print(f"Hello, My name is {name} and I'm {age} years old.")

输出:

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

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

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

print(f"{2 * 30})"

输出:

60

然而,我们可以在功能中使用。

def upercase(input):
    return input.uper()

name = "Sachin Tendulkar"
f"{upercase(name)} is great."

输出:

Sachin Tendulkar is great

f-string也可以与类对象一起使用。让我们了解下面的示例。

示例

class Actor:
    def __init__(self, first_name, last_name, movie):
        self.first_name = first_name
        self.last_name = last_name
        self.movie = movie

    def __str__(self):
        return f"{self.first_name} {self.last_name}'s superhit movie is {self.movie}."

    def __repr__(self):
        return f"{self.first_name} {self.last_name}  {self.movie}. Superhi!"

ac = Actor('Keenu', 'Reevs', 'Matrix')
print(f"{ac}")

输出:

Keenu Reevs's superhit movie is Matrix.

解释 –

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

print(f"{ac}")
print(f"{ac}"!r)

输出:

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

字典中的F字符串

在使用F字符串时,我们在处理字典键时要小心。在引用字典键和F字符串时,要使用不同的引号。让我们来看下面的示例来理解。

示例

detail = {"name": "John", "age": 19}
print(f"{detail['name']} is {detail['age']} years old.")

输出:

John is 19 years old.

以下方法在字典中不允许使用。

示例

detail = {"name": "John", "age": 19}
print(f'{detail['name']} is {detail['age']} years old.')

输出:

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

如上面的代码中所看到的,我们将双引号更改为单引号,导致出现错误。

速度

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

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

示例1:

import timeit
print(timeit.timeit("""name = "Sachin"
age = 74
'%s is %s.' % (name, age)""", number = 10000))

输出:

0.0022497819736599922

示例2:

import timeit
print(timeit.timeit("""name = "Mathew"
age = 40
'{} is {}.'.format(name, age)""", number = 10000))

输出:

0.0025783719611354172

示例3:

import timeit
print(timeit.timeit("""name = "Rockey"
age = 74
f'{name} is {age}.'""", number = 10000))

输出:

0.0019360429723747075

如我们所见,f-string位于列表的顶部。

花括号

为了在代码中显示花括号,您应该使用双引号,如下所示。让我们了解以下示例。

示例

f"{{70 + 40}}"

输出:

{70 + 40}

如果我们使用三个大括号,它会在字符串中显示单个大括号。让我们看下面的示例。

示例

f"{{{90 + 4}}}"

输出:

{94}

我们可以使用三个以上的大括号来显示更多的大括号。

示例

f"{{{{70 + 4}}}}"

输出:

{{70 + 4}}

反斜杠

我们可以在f-string的字符串部分使用反斜杠转义。然而,在f-string的表达式部分不能使用反斜杠进行转义。让我们来看下面的示例。

示例

f"{\"Medric Pacalo\"}"
  File "", line 1
    f"{\"Medric Pacalo\"}"

输出:

SyntaxError: f-string expression part cannot include a backslash

内联注释

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

示例

f"Tony is {10 * 73 #Hate this!}."
f"Tonyr is {2 * 37 #Hate this!}."

输出:

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

结论

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程