MEMOO
MEMOO
Published on 2025-04-21 / 3 Visits
0
0

Python字符串格式化(f-string)

概要:在本教程中,你将学习 Python F-字符串(f-strings)以及如何使用它们来格式化字符串,使你的代码更具可读性。

Python F-String简介

Python 3.6 引入了 f-string,它允许你以更快、更优雅的方式格式化文本字符串。与 format() 方法相比,f-string提供了一种在字符串字面量中嵌入变量和表达式的更清晰的语法。

例如:

name = 'John'
s = f'Hello, {name}!'
print(s)

输出:

Hello, John!

其工作原理如下:

  • 首先,定义一个值为 'John' 的变量。

  • 然后,将该 name 变量放在字符串字面量中的花括号 {} 内。注意,你需要在字符串前加上字母 f 来表示这是一个 f-字符串。使用大写字母F)也是有效的。

  • 第三步,打印出字符串 s

需要注意的是,Python 在运行时对 f-字符串中的变量和表达式进行求值。它会用变量和表达式 {name} 的值替换 f-字符串中的这些占位符。

Python f-string 示例

以下示例在 f-string 的花括号内调用 upper() 方法,将名字转换为大写:

name = 'John'
s = F'Hello, {name.upper()}!'
print(s)

输出:

Hello, JOHN!

以下示例在 f-string 中使用了多个花括号:

first_name = 'John'
last_name = 'Doe'
s = F'Hello, {first_name} {last_name}!'
print(s)

输出:

Hello, John Doe!

多行 f-string

Python 允许你使用多行 f-string 。要创建多行 f-string ,你需要在每一行都加上字母 f。例如:

name = 'John'
website = 'PythonTutorial.net'

message = (
    f'Hello {name}. '
    f"You're learning Python at {website}." 
)

print(message)

输出:

Hello John. You're learning Python on PythonTutorial.net.

如果你希望将一个 f-string 扩展到多行,可以使用反斜杠 (\) 来转义回车符,如下所示:

name = 'John'
website = 'PythonTutorial.net'

message = f'Hello {name}. ' \
          f"You're learning Python at {website}." 

print(message)

以下示例展示了如何将三引号 (""") 与 f-字符串 一起使用:

name = 'John'
website = 'PythonTutorial.net'

message = f"""Hello {name}.
You're learning Python at {website}."""

print(message)

输出:

Hello John.
You're learning Python at PythonTutorial.net.

花括号

在评估 f-string 时,Python 会将双花括号替换为单个花括号。然而,双花括号并不表示表达式的开始。

Python 不会对双花括号内的表达式进行求值,也不会将双花括号替换为单个花括号。

例如:

s = f'{{1+2}}'
print(s)

输出:

{1+2}

以下是带有三重花括号的 f-string 示例:

s = f'{{{1+2}}}'
print(s)

输出:

{3}

在这个示例中,Python 将 {1+2} 作为一个表达式进行求值,返回结果为 3。同时,它将剩余的双花括号替换为单个花括号。

若要在结果字符串中添加更多的花括号,你可以使用超过三重的花括号:

s = f'{{{{1+2}}}}'
print(s)

输出:

{{1+2}}

在这个示例中,Python 将每一对双花括号替换为单个花括号。

Python f-string 中表达式的求值顺序

Python 按从左到右的顺序对 f-string 中的表达式进行求值。如果表达式具有副作用(side effects),这一点就显而易见了,例如以下示例:

def inc(numbers, value):
    numbers[0] += value
    return numbers[0]

numbers = [0]

s = f'{inc(numbers,1)},{inc(numbers,2)}'
print(s)

输出:

1,3

在这个示例中,以下函数调用将 numbers 列表中的第一个数字加一:

inc(numbers,1)

在此调用之后numbers[0] 的值变为 1。而第二次调用将 numbers 列表中的第一个数字加 2,结果为 3。

使用 f-string 格式化数字

以下示例使用 f-string 将整数格式化为十六进制:

number = 16
s = f'{number:x}'
print(s)  # 10

以下示例使用 f-string 将数字格式化为科学计数法:

number = 0.01
s = f'{number:e}'
print(s)  # 1.000000e-02

如果你想在数字的开头补零,可以按如下方式使用 f-string 格式化:

number = 200
s = f'{number: 06}'
print(s)  # 00200

06 表示结果数字字符串的总位数(包括前导零)。

若要指定小数位数,你也可以使用 f-string:

number = 9.98567
s = f'{number: .2f}'
print(s)  # 9.99

注意,在这种情况下,f-string 也会执行四舍五入操作。

如果数字太大,你可以使用数字分隔符来使其更易于阅读:

number = 400000000000
s = f'{number: ,}'  # also can use _
print(s)  # 400,000,000,000

要将数字格式化为百分比,你可以使用以下 f-string 格式:

number = 0.1259
s = f'{number: .2%}'
print(s)  # 12.59%

s = f'{number: .1%}'
print(s)  # 12.5%

Python 提供了更复杂的格式规则,你可以通过以下链接进行参考。

总结

  • Python f-string 为格式化文本字符串提供了一种优雅的方式。

  • Python 在运行时将 f-字符串中花括号 {} 内嵌入的表达式的计算结果替换进去。


Comment