设为首页 加入收藏

TOP

Python 3.12 抢先看——关于 f-string 的改动(一)
2023-08-06 07:49:39 】 浏览:121
Tags:Python 3.12 关于 f-string

Python 3.12 抢先看——关于 f-string 的改动

哈喽大家好,我是咸鱼

相信小伙伴们对 python 中的 f-string 都不陌生

f-string 是格式化字符串的缩写,是以小写或大写字母 F 为前缀的字符串文本

f-string 提供简洁明了的语法,允许对变量和表达式进行插值

那对于还在即将发布的还在测试阶段的 python 3.12 版本中,f-string 有哪些改动?python 3.12 版本之前的 f-string 又有哪些限制?

闲话少说,我们直接进入正文

原文链接:https://realpython.com/python312-f-strings/

f-string 在 python 3.12 之前的限制

我们可以使用 Python 的 f-string 进行字符串格式化和插值,f-string 是以字母 F (大写小写都行)为前缀的字符串文本

这种文本允许插入变量和表达式,Python 会对其进行评估以生成最终字符串

自从在 Python 3.6 版本中引入以来,f-string 在 Python 社区内已经广泛流行起来。人们对它们的采纳热情高涨,并将其作为现代 Python 编程的标准

这其中的原因是什么呢?

这是因为 f-string 提供了一种简洁而易读的语法,允许我们格式化字符串并插入变量和表达式,而无需使用传统的.format() 方法或旧式的字符串格式运算符(%)

然而,为了引入 f-string,CPython 核心开发团队必须做出关键的决策,特别是在解析f字符串时,所以 f-string 有自己的解析代码

换句话说,CPython 有一个专用的 f-string 解析器。因此,f-string 语法不是官方 Python 语法的一部分

从核心开发人员的角度来看,这样的实现决策意味着相当大的维护成本,因为他们必须手动维护一个单独的解析器

而且不作为官方语法的一部分,也意味着其他 Python 实现,如 PyPy,无法确定他们是否正确实现了 f-string

然而,最重要的负担在于用户方面。从用户的角度来看,当前的 f-string 实现施加了一些限制:

  1. 无法重复使用引号或字符串分隔符
  2. 无法嵌入反斜杠,这意味着不能使用转义字符
  3. 禁止添加内联注释
  4. f-string 的嵌套仅限于 Python 中可用的引用变体

PEP 536 列出了这些限制。接下来我们通过一些小示例来了解这些限制如何影响我们在 Python 中使用 f-string

示例中使用的是 python 3.11 版本,如果使用较低的版本可能会导致输出不一样

我们首先在 f-string 中插入字典的 key

>>> employee = {
...     "name": "John Doe",
...     "age": 35,
...     "job": "Python Developer",
... }

>>> f"Employee: {employee["name"]}"
  File "<stdin>", line 1
    f"Employee: {employee["name"]}"
                           ^^^^
SyntaxError: f-string: unmatched '['

在上面的示例中,我们尝试在 f-string 中插入员工姓名,但是报错了

因为 "name" 键周围的双引号会破坏字符串文本(f-string 无法重复使用引号或字符串分隔符

若要解决此问题,需要使用不同类型的引号来分隔键

我们将双引号用于 f-string ,单引号用于字典 key,这下就不会报错了

>>> f"Employee: {employee['name']}"
'Employee: John Doe'

f-string 的第二个限制是不能在嵌入式表达式中使用反斜杠字符

>>> words = ["Hello", "World!", "I", "am", "a", "Pythonista!"]

>>> f"{'\n'.join(words)}"
  File "<stdin>", line 1
    f"{'\n'.join(words)}"
                         ^
SyntaxError: f-string expression part cannot include a backslash

我们看到上面的示例得到了一个 SyntaxError ,因为 f-string 不允许在由大括号分隔的表达式中使用反斜杠字符

我们可以通过下面的方法来实现,但他并不优美

>>> word_lines = "\n".join(words)

>>> f"{word_lines}"
'Hello\nWorld!\nI\nam\na\nPythonista!'

>>> print(f"{word_lines}")
Hello
World!
I
am
a
Pythonista!

f-string 的另一个限制是它们不允许在嵌入式表达式中插入注释

虽然这种限制可能看起来是多余的,但在某些情况下,一个好的注释可以帮助其他开发人员更好地理解你的代码

>>> employee = {
...     "name": "John Doe",
...     "age": 35,
...     "job": "Python Developer",
... }

>>> f"""Storing employee's data: {
...     employee['name'].upper()  # Always uppercase name before storing
... }"""
  File "<stdin>", line 3
    }"""
        ^
SyntaxError: f-string expression part cannot include '#'

在上面的示例中,我们使用了三引号生成多行的字符串,当我们尝试增加注释时,程序却报错了

最后,f-string 还有另一个限制——f-string中的嵌套级别数受 Python 中可用的字符串分隔符的限制,这些分隔符是 "'"""'''

>>> f"""{
...     f'''{
...         f"{f'{42}'}"
...     }'''
... }"""
'42'

>>> f"""{
...     f'''{
...
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇python教程 入门学习笔记 第3天 .. 下一篇高效Python-2-1 剖析(Profiling ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目