Python f-strings完全指南:掌握PEP 498字符串插值技巧

这是文章《Python f-strings 即 PEP 498 – 字符串插值》的第1部分(共1部分)。

Python f-strings(格式化字符串)是一种新的字符串格式化方法。这个功能是通过PEP-498在Python 3.6中引入的,也被称为字面字符串插值。

我们为什么需要f-strings?

Python提供了多种格式化字符串的方法。让我们快速浏览一下它们以及它们可能遇到的问题。

  • % 格式化 – 适用于简单格式化,但仅支持字符串、整数和双精度浮点数。我们不能将其用于对象。
  • 模板字符串 – 非常基础。模板字符串只适用于类似字典的关键字参数。不允许调用任何函数,且参数必须是字符串。
  • 字符串format() – Python字符串format()函数的引入是为了克服%格式化和模板字符串的问题和功能限制。然而,它过于冗长。让我们通过一个简单例子看看它的冗长性。
    >>> age = 4 * 10
    >>> ‘我的年龄是{age}。’.format(age=age)
    ‘我的年龄是40。’

Python f-strings和format函数几乎类似,但是去除了format函数的冗长性。让我们看看如何使用f-strings轻松地格式化上述字符串。

>>> f'我的年龄是{age}'
'我的年龄是40。'

Python f-strings是为了在字符串格式化时提供最简化的语法而引入的。这些表达式在运行时被求值。如果你使用的是Python 3.6或更高版本,你应该使用f-strings来满足你所有的字符串格式化需求。

Python f字符串示例

让我们来看一个关于f-strings的简单例子。

name = 'Pankaj'
age = 34

f_string = f'我的名字是{name},我的年龄是{age}'

print(f_string)
print(F'我的名字是{name},我的年龄是{age}')  # f和F是相同的

name = 'David'
age = 40

# f_string已经被评估,现在不会改变
print(f_string)

输出:

我的名字是Pankaj,我的年龄是34
我的名字是Pankaj,我的年龄是34
我的名字是Pankaj,我的年龄是34

Python逐句执行语句,一旦f-string表达式被评估,即使表达式值发生变化,它们也不会改变。这就是为什么在上述代码片段中,即使在程序的后半部分’姓名’和’年龄’变量已经改变,f_string的值仍然保持不变。

1. 表达式和转换的f-strings

我们可以使用f-strings将日期时间转换为特定的格式。我们还可以在f-strings中运行数学表达式。

from datetime import datetime

name = 'David'
age = 40
d = datetime.now()

print(f'五年后的年龄将是{age+5}')  # age = 40
print(f'带引号的名字 = {name!r}')  # name = David
print(f'默认格式化的日期 = {d}')
print(f'自定义格式化的日期 = {d:%m/%d/%Y}')

输出:

五年后的年龄将是45
带引号的名字 = 'David'
默认格式化的日期 = 2018-10-10 11:47:12.818831
自定义格式化的日期 = 10/10/2018

2. f-strings支持原始字符串

我们也可以使用f-strings来创建原始字符串。

print(f'默认格式化的日期:\n{d}')
print(fr'默认格式化的日期:\n {d}')

输出:

默认格式化的日期:
2018-10-10 11:47:12.818831
默认格式化的日期:\n 2018-10-10 11:47:12.818831

3. 使用对象和属性的f-strings

我们也可以在f-strings中访问对象属性。

class Employee:
    id = 0
    name = ''

    def __init__(self, i, n):
        self.id = i
        self.name = n

    def __str__(self):
        return f'E[id={self.id}, name={self.name}]'


emp = Employee(10, 'Pankaj')
print(emp)

print(f'员工: {emp}\n姓名是{emp.name},ID是{emp.id}')

输出:

E[id=10, name=Pankaj]
员工: E[id=10, name=Pankaj]
姓名是Pankaj,ID是10

4. 使用f字符串调用函数

我们可以在f-strings格式化中调用函数。

def add(x, y):
    return x + y


print(f'求和(10,20) = {add(10, 20)}')

输出:

求和(10,20) = 30

5. 带空格的f字符串

如果表达式中包含前导或尾随空格,则会被忽略。如果文字字符串部分包含空格,则会保留它们。

>>> age = 4 * 20
>>> f'   年龄 = {  age   }  '
'   年龄 = 80  '

6. 使用f-字符串的Lambda表达式

我们也可以在f-string表达式中使用lambda表达式。

x = -20.45
print(f'Lambda示例: {(lambda x: abs(x)) (x)}')

print(f'Lambda平方示例: {(lambda x: pow(x, 2)) (5)}')

结果:

Lambda示例: 20.45
Lambda平方示例: 25

7. f-字符串的其他例子

让我们看一些Python f-strings的其他例子。

print(f'{"带引号的字符串"}')
print(f'{{ {4*10} }}')
print(f'{{{4*10}}}')

输出:

带引号的字符串
{ 40 }
{40}

关于Python格式化字符串,也就是f-strings,就是这些了。

你可以从我们的GitHub代码库中查看完整的Python脚本和更多的Python示例。

参考文献:PEP-498,官方文档。

bannerAds