Python 3.6引入了一个新的格式化字符串的方法:f-string(formatted string),它可以直接把变量写在字符串中,使得格式化的字符串看起来很直观,下面对f-string进行简单介绍。

f-string的简单使用

name = "admin"
age = 21

print(f"Name: {name}, age: {age}.")  
# Name: admin, age: 21.

Python使用小写字母f或者大写字母F来标识一个f-string,在需要插入变量的地方用花括号将变量名括起来即可。如果花括号没有正确对应,那么会产生一个SyntaxError

表达式及函数调用

f-string支持在花括号内使用表达式、函数调用,lambda等方式对变量进行处理。

print(f"{1 + 2 * 3}")
# 7

import math
print(f"{math.pow(2, 3)}")
# 8.0

print(f"{(lambda x: 2 * x)(3)}")
# 6

使用lambda表达式时需要注意把表达式的定义用括号括起来,否则会报错。

python中%f python中f字符串的用法_python中%f

转义字符

如果需要在f-string中使用花括号,则使用 {{ 或者 }} ,两个花括号放在一起即可。其他的转移字符串如双引号 \” 、单引号 \’ 、制表符 \t 、换行符 \n 等与普通字符串一致,但是只能在花括号外转义,在花括号内使用就会报错。

如果希望避免引号产生冲突的话,可以考虑将单引号、双引号和三引号交替进行使用。

格式化

f-string的格式化与Python之前提供的format函数的格式化方法比较接近,因此可以参考format的格式化方法进行学习。格式化的基本语法如下:

pi = 3.1415926
print(f"{pi:.2f}")
# 3.14

在花括号内,使用冒号 : 分隔变量与格式化的描述符,其中.2f表示取浮点数的小数点后两位。

填充/截断

name = "admin 1234"
print(f"{name:_<20}")
# admin 1234__________

print(f"{name:_>20}")
# __________admin 1234

print(f"{name:_^20}")
# _____admin 1234_____

在冒号后面首先指定填充的符号,然后指定对齐方式,最后指定字符串的位数

也可以指定变量的长度,如果格式化的位数不足变量的长度,那么就会发生截断

print(f"{name:_>20.100}")  # 在.后面指定选取变量的长度,因为100大于10,所以不会截断
# __________admin 1234

print(f"{name:_>20.5}")  # 格式化长度不足时就会发生截断
# _______________admin

数字格式化

pi = 3.1415926
print(f"{pi:010.2f}")
# 0000003.14

big = 12345678
print(f"{big:_d}")
# 12_345_678

第一个例子表示字符串全长为10,截取小数点后两位,高位用0补齐。

第二个例子表示将数字各位之间用分隔符分开,可以指定为 , 或者 _ ,具体格式化方法参见附录。

时间/日期格式化

from datetime import date
today = date.today()  # datetime.date(2023, 3, 4),是这篇博客的编写时间
print(f"{today:%m-%d  %Y}")
# 03-04  2023

格式化描述符的横线不是必选项,可以使用其他符号分隔年月日的不同字段,具体描述符见附录。

附录:格式化描述符速查表

填充/截断描述符

格式描述符

含义与作用

<

左对齐(字符串默认对齐方式)

>

右对齐(数值默认对齐方式)

^

居中

数字格式化描述符

数字符号格式化描述符

格式描述符

含义与作用

+

负数前加负号(-),正数前加正号(+)

-

负数前加负号(-),正数前不加任何符号(默认)

(空格)

负数前加负号(-),正数前加一个空格

数字展示方式描述符

格式描述符

含义与作用

#

切换数字显示方式

数字类型

不加“#”(默认情况)

加上“#”

加上后的变化

二进制

111 1101

0b111 1101

前面显示“0b”

八进制

175

0o175

前面显示“0o”

十进制

125

125


十六进制

7D

0x7D

前面显示0X或0x(视原数字是否使用大写字母而定)

数字分隔描述符

格式描述符

含义与作用

,

使用 , 作为千位分隔符

_

使用 _ 作为千位分隔符

其中逗号适用于浮点数、复数和十进制整数;下划线适用于浮点数、复数和所有进制的整数;如果不指定分隔符,那么默认不使用分隔符。

格式描述符

格式描述符

含义与作用

适用变量类型

s

普通字符串

字符串

b

二进制整数

整数

c

字符格式,按Unicode编码转换为对应字符

整数

d

十进制整数

整数

o

八进制整数

整数

x

十六进制整数,使用小写字母

整数

X

十六进制整数,使用大写字母

整数

e

科学计数法,用 e 表示阶数

浮点数、复数、整数(自动转换成浮点数)

E

与e等价,用 E 表示阶数

浮点数、复数、整数(自动转换成浮点数)

f

小数,默认精度为6

浮点数、复数、整数(自动转换成浮点数)

F

与f等价,但将nan和inf转成大写

浮点数、复数、整数(自动转换为浮点数)

g

通用小数的格式,小数用f;大数用e

浮点数、复数、整数(自动转换为浮点数)

G

与G等价,但使用大写字符

浮点数、复数、整数(自动转换为浮点数)

%

百分比格式

浮点数、整数(自动转换为浮点数)

宽度描述符

格式描述符

含义与作用

width

整数 width 指定宽度

0width

整数 width 指定宽度,开头的 0 指定高位用 0 补足宽度

width.precision

整数 width 指定宽度,整数 precision 指定显示精度

其中width适用于字符串,不适用于数字;0width适用于数字,不适用于字符串;width.precision的precision如果用在字符串上,则指定是前n位,如果用在浮点数上,则指定小数点后n位。

时间/日期格式化

格式描述符

含义

显示样例

%a

星期几,使用缩写

Sun

%A

星期几,使用完整名称

Sunday

%w

星期几,从周日算起,周日为0

7

%u

星期几,从周一算起,周日为7

6

%d

日期,2位数字

04

%b

月份,使用缩写

Mar

%B

月份,使用完整名称

March

%m

月份,2位数字

03

%y

年份,后2位数字

23

%Y

年份,4位数字

2023

%H

小时,24小时制

21

%I

小时,12小时制

09

%p

上午/下午

PM

%M

分钟,2位数字

12

%S

秒钟,2位数字

20

%f

微秒,6位数字

123321

%z

UTC偏移量,±HHMM[SS],未指定时区则返回空字符串

+1030

%Z

时区名

CST

%j

一年中的第几天,3位数字

063

%U

一年中的第几周,2位数字,首个周日后的星期为第0周

09

%W

一年中的第几周,2位数字,首个周一后的星期为第0周

09

%V

一年中的第几周,2位数字,首个包含1月4日的星期为第1周

09