概要:在本教程中,你将学习 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-字符串中花括号
{}
内嵌入的表达式的计算结果替换进去。