道一站 道一站
首页
  • 历史文明
  • 自我管理
  • 经济金融
  • 未来科技
  • 李笑来
  • 股票
  • 期货
  • 期权
  • 外盘
  • 量化
  • 区块
  • 认知
  • 数理
  • 收藏
  • 前端

    • JavaScript
    • TypeScript
  • 页面

    • HTML
    • CSS
  • 编程

    • C++
    • Python
    • Shell
    • 小程序开发
  • 笔记

    • 《Git》
    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
  • 技术文档
  • Linux
  • Docker
  • GitHub
  • 博客搭建
  • 效用工具
  • 周易基础
  • 奇门遁甲
  • 收藏资源
  • 学习方法
  • 实用技巧
  • 友情链接
  • 分类
  • 标签
  • 归档
关于

daotoyi

静水流深
首页
  • 历史文明
  • 自我管理
  • 经济金融
  • 未来科技
  • 李笑来
  • 股票
  • 期货
  • 期权
  • 外盘
  • 量化
  • 区块
  • 认知
  • 数理
  • 收藏
  • 前端

    • JavaScript
    • TypeScript
  • 页面

    • HTML
    • CSS
  • 编程

    • C++
    • Python
    • Shell
    • 小程序开发
  • 笔记

    • 《Git》
    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
  • 技术文档
  • Linux
  • Docker
  • GitHub
  • 博客搭建
  • 效用工具
  • 周易基础
  • 奇门遁甲
  • 收藏资源
  • 学习方法
  • 实用技巧
  • 友情链接
  • 分类
  • 标签
  • 归档
关于
  • C++

  • JavaScript

  • TypeScript

  • CSS

  • HTML

  • Python

    • Python 速查表
    • python 命名规则
    • Python 相关文件常见的后缀名
    • Python 中最常用的 5 种线程
    • Python 数据规范化(归一化)及Z-score标准化
    • Python 中的绝对导入和相对导入
    • Python 中有 3 个不可思议的返回功能
    • Python 技巧分享
    • PyQt5学习资料
    • PyQt5
    • PyQt5 QDockWidget
    • Python @1装饰器入门教程!
    • Python @函数装饰器及用法
    • Python f-string 格式化字符串的 7 个层级
      • 3.1 打印引号
      • 3.2 打印双括号{}
      • 3.3 打印反斜线\\
    • Python 中最常用的 5 种线程
    • Python 中有 3 个不可思议的返回功能
    • Python string去除(中文、英文、数字、标点符号)
  • Shell

  • Notes

  • 编程
  • Python
daotoyi
2023-10-07
目录

Python f-string 格式化字符串的 7 个层级

作者:杨周

译者:大江狗

原文:7 Levels of Using F-Strings in Python | by Yang Zhou VX公众号文章 (opens new window)

f-string是Python 3.6推出的一种简单而不同的字符串格式技术,可以优雅地表达Python字符串。除非您仍在使用旧的 Python 版本,否则在格式化字符串时,f 字符串绝对应该是您的首选。因为它可以通过一个迷你语法满足您的所有要求,甚至运行字符串的表达式。本文将深入探讨这项技术从初级到深度的7个层次。在了解它们之后,您可能会成为字符串格式化大师。

# 1. 轻松从变量显示值

使用 f 字符串只需要做两件事:

  • 在字符串前添加一个小写的f;
  • 使用f字符串中以{variable_name}插值变量.
name = 'Yang'
title = 'full stack hacker'
print(f'{name} is a {title}.')
# Yang is a full stack hacker.
1
2
3
4

如上所示,在 f 字符串机制的帮助下,我们可以编写简单且更少的代码,以便在字符串中显示更多代码。它完美地呼应了 Python 的禅宗。

"简单总比复杂好。

# 2. 数字格式化

有时仅仅显示原始值可能无法满足我们的需求,但是直接修改原始变量通常不是个好主意,因为变量可能在其他地方使用。不用担心,Python f字符串还支持"格式规范迷你语言",它使我们能够根据自己喜欢的方式在 f 字符串中格式化值,尤其是数字。

pi = 3.1415926
print(f'Pi is approximately equal to {pi:.2f}')
# Pi is approximately equal to 3.14

id = 1  # need to print a 3-digit number
print(f"The id is {id:03d}")
# The id is 001

N = 1000000000  # need to add separator
print(f'His networth is ${N:,d}')
# His networth is $1,000,000,000
1
2
3
4
5
6
7
8
9
10
11

以上示例仅显示了冰山一角。对于格式规格语法的完整列表,相应的官方文档是您最好的朋友。

# 3. 正确打印特殊字符

我们可以通过 f 字符串打印这些字符或其他特殊字符吗?比如''和{}。是的,当然。但语法有点棘手。让我们来看看。

# 3.1 打印引号

正如我们所知,反斜线\是常用的转义字符,用于调用对其以下字符的替代解释。对于 f 字符串,我们需要注意一条规则:\在 f 字符串表达式的括号{}中不起作用。

name = 'Yang'
# Correct Way:
print(f'\'{name}\' is a full stack hacker.')
# 'Yang' is a full stack hacker.

# 错误方式:
print(f'{\'name\'} is a full stack hacker.')
# SyntaxError: f-string expression part cannot include a backslash
1
2
3
4
5
6
7
8

# 3.2 打印双括号{}

用 f字符串打印{}的方法是不同的, 非常容易出bug。这次我们不能使用反斜线。

name = 'Yang'


name = 'Yang'

# 1
print(f'{name} is a full stack hacker.')
# 'Yang' is a full stack hacker.

# 2
print(f'{{name}} is a full stack hacker.')
# {name} is a full stack hacker.

# 3
print(f'{{{name}}} is a full stack hacker.')
# {Yang} is a full stack hacker.

# 4
print(f'{{{{name}}}} is a full stack hacker.')
# {{name}} is a full stack hacker.

# 5
print(f'{{{{{name}}}}} is a full stack hacker.')
# {{Yang}} is a full stack hacker.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

如上例所示,该变量是作为f-字符串的括号还是变量处理取决于其周围的括号数。如果您不知道这种奇怪的机制,则容易出现错误。

# 3.3 打印反斜线\

打印反斜线\很简单:只需使用双反斜线打印。但是不要将它们添加到 f 字符串表达式括号当中。

name = 'Yang'

print(f'\\{name}\\ is a full \\stack hacker.')
# \Yang\ is a full \stack hacker.

#错误的
print(f'{\\name\\} is a full \\stack hacker.')
# SyntaxError: f-string expression part cannot include a backslash
1
2
3
4
5
6
7
8

# 4. 小心打印字典值

将字典的值应用到 f 字符串中也容易出现错误。我们必须使用不同的引号来描述字典键和 f 字符串,如下所示。如果f字符串用双引号表示,那么变量里的字典键必须用单引号。

Hacker = {'name': 'Yang'}

print(f"{Hacker['name']} is a hacker")
# Yang is a hacker
print(f'{Hacker["name"]} is a hacker')
# Yang is a hacker
print(f'{Hacker['name']} is a hacker')
# 语法错误 SyntaxError: invalid syntax
print(f"{Hacker["name"]} is a hacker")
# 语法错误 SyntaxError: invalid syntax
1
2
3
4
5
6
7
8
9
10

如上所示,如果我们对键名和 f 字符串都使用相同的单引号或双引号, Python 会对我们的代码感到困惑, 从而报错。

# 5. 正确处理多行 F 字符串

为了使我们的代码更易读,有必要使用多行书写一长串字符。但如果是 f 字符串,不要忘记在每行之前添加f。

ame = 'Yang'


ame = 'Yang'

# 错误方式
print(f"{name} is a hacker."
      "{name} is also a top writer."
      "{name} writes on Medium."
      )
# Yang is a hacker.{name} is also a top writer.{name} writes on Medium.

# 正确方式
print(f"{name} is a hacker."
      f"{name} is also a top writer."
      f"{name} writes on Medium."
      )
# Yang is a hacker.Yang is also a top writer.Yang writes on Medium.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 6. 像大师一样显示日期和时间

如果我们需要打印日期或时间,f 字符串将再次告诉我们它是多么方便:

from datetime import datetime
today = datetime.today()
print(f"Today is {today}")
# Today is 2021-07-31 18:20:48.956829
print(f"Today is {today:%B %d, %Y}")
# Today is July 31, 2021
print(f"Today is {today:%m-%d-%Y}")
# Today is 07-31-2021
1
2
3
4
5
6
7
8

如上例所示,在 f 字符串的帮助下,我们可以使用我们任何喜欢的格式打印日期或时间。

# 7. 评估 F 字符串内的表达式

当我第一次知道 f 字符串时, 我简直不敢相信:我们可以在 f 字符串内运行 Python 表达式。如果是真的,还算是字符串吗?

我仔细阅读了 PEP 498,终于明白了:

F 字符串提供了一种将表达式嵌入字符串字面的方法。需要注意的是,f 字符串实际上是在运行时间评估的表达方式,而不是恒定的值。

因此,f 字符串与普通字符串不同,此功能赋予它更大的能力。例如,我们可以在它里面运行一个显示时间的功能。

from datetime import datetime

print(f"Today is {datetime.today()}")
# Today is 2021-07-31 18:20:48.956829
1
2
3
4

Python 中的 f-string是一个伟大的字符串格式化技术, 显示了 Python 是多么优雅。它非常强大,因为它不是一个普通的字符串,而是在运行时可以表达的字符串。对于一些特殊情况,它有特殊的规则,我们需要谨慎使用它。

上次更新: 2023/10/10, 14:48:21
Python @函数装饰器及用法
Python 中最常用的 5 种线程

← Python @函数装饰器及用法 Python 中最常用的 5 种线程→

最近更新
01
置身事内
10-10
02
基础知识|八卦五行天干地支
10-08
03
基础知识|推算年月日时的干支
10-08
更多文章>
Theme by Vdoing | Copyright © 2021-2023 Daotoyi | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式