龙空技术网

编写更多 pythonic 代码(七)——Python 3的f-strings

SuperOps 336

前言:

今天各位老铁们对“python3实例教程”可能比较看重,姐妹们都需要剖析一些“python3实例教程”的相关资讯。那么小编在网摘上网罗了一些对于“python3实例教程””的相关文章,希望姐妹们能喜欢,咱们快快来了解一下吧!

一、Python中的"f-strings"是什么?

Python 3的f-Strings是一种改进的字符串格式化语法,它具有更好的可读性、简洁性、出错率低以及更快的特点。现在让我们从老式的字符串格式化开始了解一下。

首先是%-格式化,这是一种较旧的字符串格式化方法。它使用百分号作为占位符来表示需要插入的值。例如,如果我们想要将一个变量的值插入到字符串中,可以使用类似于"Hello, %s!"的格式,其中%s表示字符串占位符。然后,我们使用%操作符将实际的值传递进去。

第二种格式化方法是使用str.format()。它提供了更灵活的方式来向字符串中插入值。通过在字符串中使用大括号{}作为占位符,我们可以在format()方法中传递实际的值,并将其替换为相应的位置。例如,"Hello, {}!".format(name)将会用name变量的值替换掉其中的占位符。

接下来,让我给你展示一些例子来说明这两种格式化方法的用法。

二、Python中的"老派"字符串格式化方式

在 Python 3.6 之前,我们有两种选择来格式化字符串:%-formatting 和 str.format()。让我向你展示这两种方法。

%-formatting 是最早出现的格式化方式,可以称为原始风格。下面是它在实践中的样子。我们首先设置一个变量并给它一个名字:

first_name = "John"

要在一个字符串中使用这个变量,你需要在字符串中使用%s作为占位符,然后在其后面添加百分号%,再加上变量的名字:

print("我的名字是 %s" % first_name)

然而,使用 %-formatting 可能会导致代码非常混乱,特别是对于其他人来阅读你的代码。他们需要进行大量的计算才能理解代码。但是,还有更好的方法可以实现相同的效果。让我们来谈谈 str.format()。

str.format() 是在 Python 2.6 中引入的。在这种情况下,我们可以在字符串中使用大括号{}作为占位符,并在字符串的末尾使用.format():

last_name = "Smith"age = 30print("我的姓氏是 {},年龄是 {}".format(last_name, age))

看起来,str.format() 相比于 %-formatting 具有一些重要的优势。尤其是当我们需要处理大量参数和较长的字符串时,它仍然可以保持代码的可读性。

好了,我们关闭第一个print()语句。接下来是使用.format()进行格式化。使用这种方法,first_name 将等于 first_name,last_name 将等于 last_name,age 将等于 age:

print("我的名字是 {},姓氏是 {},年龄是 {}".format(first_name, last_name, age))

通过使用 str.format(),我们可以更清晰和简洁地实现字符串的格式化。希望这对你有所帮助!

三、f-Strings的简单语法

f-Strings是一种新的、改进的字符串格式化方式,也被称为格式化字符串字面值。相比于传统的百分号(%)格式化和str.format()方法,它具有更简单、更直观的语法,并且在运行时进行动态求值。

使用f-Strings的基本语法很简单,在字符串前添加一个前缀"f"或"F",然后在大括号{}内放置需要插入的表达式,这些表达式会在运行时被求值并替换到相应位置。

让我们来看几个例子,展示f-Strings的用法。可以将多个变量放置到f-String中构建字符串,大括号内的表达式就是这些变量的名称。同时,你也可以选择使用大写的"F"前缀开头,效果与小写的"f"一样。

name = "Alice"age = 25print(f"My name is {name} and I am {age} years old.")

输出:My name is Alice and I am 25 years old.

f-Strings提供了一种美观、简洁而又直观的方式来格式化字符串。它支持任意的Python表达式,并且可以在大括号内执行操作、调用函数等。这使得在字符串中进行复杂的计算、格式化成对应的值成为可能。

另一个值得一提的特性是多行f-Strings。它们允许你在多行中构建格式化的字符串,这在处理较长或较复杂的文本时非常有用。

最后,关于性能方面的比较,f-Strings通常比传统的百分号格式化更快。由于在运行时进行求值和格式化,避免了额外的转换步骤,因此在大数据量处理或性能敏感的情况下,f-Strings表现出色。

总之,f-Strings是Python中一种新颖、强大的字符串格式化方式。它简化了格式化操作的语法,支持任意表达式和多行构建,同时具备较高的性能。在编写代码时,考虑使用f-Strings来提升代码的可读性和效率。

四、在f-Strings中嵌入任意表达式

在f-Strings中,可以嵌入任意有效的表达式。只需将表达式放在大括号 {} 中即可。这个表达式可以是数学运算、函数调用、变量访问等等。例如,可以创建一个函数to_lowercase(),通过函数.lower()将输入转换为小写。通过在f-string中调用该函数,并传入相应的变量名称,可以完成字符串拼接。

此外,还可以进行更高级的操作,如创建一个名为Comedian的类。在初始化时,设置属性.first_name、.last_name和.age。通过双下划线(dunder)方法.__str__(),可以将.first_name、.last_name和.age组合成演员的姓名和年龄的可读字符串表示形式。使用f-string时,可以通过在表达式的括号内使用标志!r来调用.__repr__()方法。

需要注意的是,当使用f-string打印对象时,默认情况下会调用.__str__()方法。如果想要使用.__repr__()版本,可以在表达式的括号内添加转换标志!r。

五、多行f-Strings

在Python中使用f-字符串,不仅可以创建单行字符串,还可以创建多行字符串。以下是一些例子:

你可以使用多行f-字符串来组装一个信息块。首先,在开头的括号处打开一个括号,并在每个字符串的末尾留出至少一个空格。

message = (    f"This is a multi-line message. "    f"You can use f-strings to assemble it.")print(message)

输出:

This is a multi-line message. You can use f-strings to assemble it.

最后,关闭括号以完成信息块的构建。请注意,在每个字符串前都需要添加f,以将其中的表达式渲染为字符串。

如果你创建了消息并没有添加f,像这样:

name = "Alice"age = 30message = (    "Name: {name}, "    "Age: {age}")print(message)

输出将会是:

Name: {name}, Age: {age}

它不会通过f-字符串对表达式进行评估,因为缺少了f。

另一种处理多行字符串的方式是使用反斜杠(\)来转义每行的末尾。

message = f"This is a multi-line message. "\          f"You can use the backslash to escape newlines."print(message)

输出与之前的例子相同。

另外,你还可以使用三重引号(""")来创建多行字符串。

message = f"""This is a multi-line message.You can use triple quotes as well."""print(message)

输出与之前的例子相同。在这种情况下,字符串中的所有换行都会被保留。

使用多行f-字符串可以方便地创建复杂的文本块,如SQL语句。你可以像下面这样构建一个带有变量和表达式的SQL查询:

name = "Alice"age = 25sql_statement = f"""SELECT *FROM CONTACTSWHERE name = '{name}'  AND age >= {age};"""print(sql_statement)

请注意,在这个示例中,我们使用了单引号将字符串变量引起来,并在AND条件中使用了大括号来表示数值变量。同时,语句的结束要使用分号。

使用f-字符串可以方便地将变量和表达式插入到字符串中,使代码更简洁易读。

六、f-Strings的速度考虑和性能

在Python中,字符串格式化是一项常见的任务,我们经常需要将变量和表达式插入到字符串中。Python提供了多种字符串格式化方法,包括%f格式化、str.format()和f-字符串。其中,f-字符串在速度上优于其他两种方法。

使用f-字符串,大括号内的每个表达式会在运行时被独立评估,然后组合成最终的字符串。下面我们通过速度对比来验证这个说法。

首先,我们导入标准库中的timeit模块,用于计算代码的执行时间。接着,我们使用三重引号(""")创建一个包含测试代码的字符串块。

针对不同的格式化方法,我们分别进行测试。对于%格式化,我们使用字符串后面跟着百分号(%),再加上一个元组,并设置循环次数为10000次。

对于str.format()方法,同样开始的部分,我们给定了名字和年龄,并在大括号中使用.format(name, age)完成插入操作。同样,我们也设置了循环次数为10000次。

而对于f-字符串,则与前面类似,设置名字和年龄,并在大括号中直接放入变量。同样,我们设置了循环次数为10000次。

通过运行以上的测试程序,我们可以看到f-字符串的速度明显优于其他两种方法。再次运行测试程序,结果同样表明f-字符串在速度上占据优势。

然而,在使用f-字符串时,我们需要记住一些细节。下面让我们进一步了解这些细节。

七、Python f-Strings:讨厌的细节

在使用F字符串时,有一些讨厌的细节需要注意。首先是引号的使用,要确保外部和内部的引号类型不同,或者使用三重引号。如果需要在外部和内部使用相同类型的引号,要使用反斜杠进行转义。

另一个细节是在使用字典时处理引号。在字典内部应使用相同形式的引号,而在外部应使用不同的引号。这样可以避免语法错误。

处理大括号时,需要使用双大括号来表示实际的大括号。如果你想要在字符串中显示大括号,就需要使用两个大括号。

在表达式内部不能使用反斜线进行转义,但可以提前创建带有转义字符的变量,并将其传递给表达式进行处理。

最后,要注意注释的位置。注释应放置在表达式的外部,而不是内部。

在使用F字符串时遵循这些细节将有助于避免错误和意外结果。

八、f-Strings结论- 前进并进行格式化!

在本文中,我们从传统字符串格式化开始回顾,介绍了三种不同的方式。首先是%-格式化,然后是str.format(),最后是引人注目的f-strings。

通过比较新旧方法,我们发现f-strings具有简洁、可读、方便和快速的优势。这种语法的使用非常简单,让我们可以轻松地插入变量值到字符串中。

在进一步探索过程中,我们学习了如何处理多行f-strings以及注意事项。要注意在不同形式的引号之间切换,同时要小心处理字典内部的引号。

另外,我们还了解到在处理大括号、反斜线和内联评论时需要格外谨慎。对于大括号,我们需要使用双大括号来表示实际的大括号;对于反斜线,我们可以事先创建带有转义字符的变量并传递给表达式进行处理;对于内联评论,则需注意将其放置在表达式的外部。

感谢你阅读本文并学习f-Strings的使用。相信现在你已经意识到了它们在代码中的价值和便利性。祝你在日后的编程工作中能灵活运用F字符串,使代码更简洁高效!谢谢!

标签: #python3实例教程