Python入门教程第77篇 格式化字符串F-strings

Posted 不剪发的Tony老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python入门教程第77篇 格式化字符串F-strings相关的知识,希望对你有一定的参考价值。

本篇将会介绍 Python F-strings 的概念,以及如何利用格式化字符串提高代码的可读性。

F-strings

Python 3.6 引入了 f-strings,可以更加快速简洁地格式化字符串。f-strings 提供了一种在字符串中嵌入表达式的方法,语法比 format() 方法更加清晰。

例如:

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

输出结果如下:

Hello, John!

代码的执行过程如下:

  • 首先,定义一个变量 name,变量的值为“John”。
  • 然后,将变量名嵌入字符串中的大括号之中。字符串前面的字母 f 表示它是一个 f-string,也可以使用大写的字母 F。
  • 最后,打印字符串 s。

Python 在运行时对 f-string 中的表达式进行求值,并使用它们的值替换表达式。

示例

以下示例使用 upper() 函数将一个 f-string 中的 name 转化为大写形式:

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!

以下示例使用 join() 方法实现了相同的功能:

first_name = 'John'
last_name = 'Doe'
s = F'Hello, " ".join((first_name, last_name))!'

print(s)

多行 F-strings

Python 支持多行 f-strings,每一行字符串之前都需要加上一个字母 f。例如:

name = 'John'
website = 'python.org'

message = (
    f'Hello name. '
    f"You're learning Python on website." 
)

print(message)

输出结果如下:

Hello John. You're learning Python on python.org.

如果单个 f-string 跨越多行,可以使用反斜线对回车符进行转移,例如:

name = 'John'
website = 'python.org'

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

print(message)

输出结果如下:

Hello John. You're learning Python on python.org.

以下示例使用三重双引号实现多行 f-string:

name = 'John'
website = 'python.org'

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

print(message)

输出结果如下:

Hello John.
You're learning Python at python.org.

大括号

在执行 f-string 时,Python 会将双重大括号替换为单个大括号。不过,双重大括号并不意味着表达式的开始。因此,Python 不会计算双重大括号中的表达式。例如:

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

输出结果如下:

1+2

以下示例使用了三重大括号:

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

输出结果如下:

3

此时,Python 将 1+2 作为表达式进行计算,返回了 3。另外,它还将剩下的双重大括号替换为单个大括号。

如果想要在结果中增加更多的大括号,我们可以在 f-strings 中继续增加大括号:

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

输出结果如下:

1+2

表达式求值顺序

Python 按照从左至右的顺序计算 f-string 中的表达式。如果表达式存在副作用,可以明显看出这个计算顺序。例如:

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 中的第一个数字加 1:

inc(numbers,1)

此时,numbers[0] 的结果为 1。然后第二次函数调用会将列表 numbers 中的第一个数字加 2,最终结果为 3。

数字格式化

如果想要格式化 f-string 中的数字,可以使用以下简单语法:

[number]:[.precision][type]

例如:

previous = 99.2
current = 110.3
vs_previous = (current - previous) / previous

print(f'Current vs. previous year: vs_previous:.2%')

输出结果如下:

Current vs. previous year: 11.19%

对于以下代码:

vs_previous:.2%

vs_previous 是需要格式化的数字,.2% 表示保留小数点后两位并且使用百分号的形式显示结果。

更多复杂的格式化规则可以参考官方文档

总结

  • Python f-strings 提供了一种格式化字符串的简洁方式。
  • Python 在运行时替换 f-strings 大括号中的表达式结果。

以上是关于Python入门教程第77篇 格式化字符串F-strings的主要内容,如果未能解决你的问题,请参考以下文章

Python入门教程第78篇 原始字符串

Python入门教程第07篇 基本数据类型之字符串

Python入门教程第07篇 基本数据类型之字符串

Python入门教程第87篇 常用字符串方法之替换子串

Python入门教程第86篇 常用字符串方法之截断字符串

Python入门教程第79篇 反斜线字符