python
主页 > 脚本 > python >

Python f-string实现高效字符串格式化

2025-05-22 | 佚名 | 点击:

f-string,称为格式化字符串常量(formatted string literals),是Python3.6新引入的一种字符串格式化方法,该方法源于PEP 498 – Literal String Interpolation,主要目的是使格式化字符串的操作更加简便。

python中常用有3种字符串格式化的方法:

其中f-string是推荐的最清晰,效率最高的方法。本篇主要讲解f-string常见的使用方法。

1.语法

f-string采用content:format} 设置字符串格式,其中 content 是替换并填入字符串的内容,可以是变量、表达式、函数等,format 是格式描述符,可以省略。

Python f-string 格式化字符串的完整格式说明是通过冒号(:)后面的格式规范符来实现的。这个格式化规范符可以用来控制数字、字符串、时间日期等数据类型的输出格式。以下是完整的格式说明,包括常见的格式化选项及其用法。

1

f"{expression:{flags}{width}{precision}{type}}"

简单使用

f-string用大括号 {} 表示被替换字段,其中直接填入替换内容:

1

2

3

4

5

6

7

8

9

10

11

>>> name = 'Eric'

>>> f'Hello, my name is {name}'

'Hello, my name is Eric'

 

>>> number = 7

>>> f'My lucky number is {number}'

'My lucky number is 7'

 

>>> price = 19.99

>>> f'The price of this book is {price}'

'The price of this book is 19.99'

注意:不管变量的类型是什么,最后都会得到字符串类型的结果

2.使用方法

2.1 宽度控制

使用f-string最常见的就是控制变量精度和输出宽度

格式描述符 含义与作用  
width 整数 width 指定宽度 0width:整数 width 指定宽度,开头的 0 指定高位用 0 补足宽度
width.precision 整数 width 指定宽度,整数 precision 指定显示精度  

以圆点为分割,圆点之前控制输出宽度,原点之后控制输出精度。

控制输出宽度,不管是数值类型和字符串类型都可以。语法:f"{变量: 宽度}"

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

>>> a = 3.1415926

# 变量宽度9,指定宽度20,数值左补齐

>>> print(f"{a:20}")

           3.1415926

>>> print(len(f"{a:20}"))

20

 

 

>>> c = "hello world"

 

>>> print(f"{c:5}")

hello world

 

>>> print(f"{c:25}")

hello world         

 

# 变量只有11个字符串,指定宽度为25,输出长度为25,以空格补齐

>>> print(len(f"{c:25}"))

25

有一个特别使用f"{变量: 0宽度}",在宽度前面加0可以实现变量显示前面用0补齐

1

2

3

4

5

>>> a = 3.1415926

 

>>> print(f"{a:020}")

000000000003.1415926

>>>

2.2 精度控制

数值

整型和浮点数使用f-string可以控制输出的精度。语法是 f"{变量: .4f}",其中4f是指小数点后的位数,可以实现精度截断或扩充。其中截断的规则是四舍五入,扩充是将精度增加到指定位数

1

2

3

4

5

6

7

8

9

10

11

12

13

>>> a = 3.1415926

 

>>> print(f"{a:.4f}")

3.1416

 

>>> b = 100

 

>>> print(f"{b}")

'100'

 

>>> print(f"{b:.6f}")

'100.000000'

>>>

字符串

字符串同样可以控制输出精度,使用语法** f"{变量:.4s}"**, 其中4s指字符串的长度,s可以省略,可以实现截断,但不会填充。设置的长度大于变量长度,输出仍然是变量的长度。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

>>> c = "hello world"

 

>>> print(f"{c:.2}")

he

 

>>> print(f"{c:.10s}")

hello worl

     

>>> print(f"{c:.5s}")

hello

 

# 精度超出长度不会填充

>>> print(f"{c:.20s}")

hello world

 

>>> print(len(f"{c:.20s}"))

11

可以同时控制宽度和精度

1

2

3

4

5

6

7

>>> a = 3.1415926

>>> print(f"{a:14.4f}")

        3.1416

 

>>> c = "hello world"

>>> print(f"{c:25.4s}")

hell

2.3 对齐

对齐是指输出时当指定宽度大于变量宽度时如何显示,可以选择的包括:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

>>> c = "hello world"

 

# 设置宽度之后就会出现空格填充,字符串默认右填充即左对齐

>>> print(f"{c:20}")

hello world        

 

>>> print(len(f"{c:20}"))

20

 

>>> print(f"{c:<20}")

hello world        

>>>

 

>>> print(f"{c:>20}")

         hello world

 

>>> print(f"{c:^20}")

    hello world

2.4 填充

在对齐时默认使用空格填充,也可以使用指定字符填充。使用语法 **f"{变量: 填充字符<宽度}" **,填充字符常见:-、+、*、0等等

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

>>> c = "hello world"

 

>>> print(f"{c:<20}")

hello world        

 

>>> print(f"{c:-<20}")

hello world---------

 

>>> print(f"{c:->20}")

---------hello world

>>>

>>> print(f"{c:-^20}")

----hello world-----

 

>>> print(f"{c:*^20}")

****hello world*****

 

>>> print(f"{c:0^20}")

0000hello world00000

2.5 数据格式

类型标识符 (type) 类型标识符决定了如何表示和格式化数值、字符串等常见数据类型。常见的类型标识符包括:

数值转十进制

1

2

3

4

5

>>> value = 0xff

>>> value

255

>>> print(f"{value:d}")

255

进制转换

1

2

3

4

5

6

7

8

9

10

11

12

13

14

>>> a = 378297640000

>>>

 

# 10转2

>>> print(f"{a:b}")

101100000010100010010111110010001000000

 

# 10转8

>>> print(f"{a:d}")

378297640000

 

# 10转16

>>> print(f"{a:x}")

58144be440

默认不添加进制的前缀,使用# 可以添加

1

2

3

4

5

6

7

8

9

10

11

12

13

>>> a = 378297640000

 

>>> print(f"{a:#b}")

0b101100000010100010010111110010001000000

 

>>> print(f"{a:#d}")

378297640000

 

>>> print(f"{a:#x}")

0x58144be440

 

>>> print(f"{a:#X}")

0X58144BE440

变量转浮点数

1

2

3

4

5

>>> value = 0xff

 

>>> print(f"{value:f}")

255.000000

>>>

将整数转换为unicode编码对应字符

1

2

3

4

5

6

7

8

9

>>> a = 69

>>> print(f"{a:c}")

E

>>> a = 290

>>> print(f"{a:c}")

?

>>> a = 2736

>>> print(f"{a:c}")

?

科学计数法

1

2

3

4

5

6

7

8

9

>>> a = 378297640000

>>>

>>> print(f"{a:e}")

3.782976e+11

 

>>> b = -0.132465

>>>

>>> print(f"{b:e}")

-1.324650e-01

百分号

将浮动点数乘以 100 并附加 % 符号

1

2

3

>>> a = 0.5473

>>> print(f"{a:%}")

54.730000%

2.6 时间格式

fstring 以通过结合 datetime 模块来实现时间的格式化。更多格式可自行查阅。

1

2

3

4

5

6

7

8

9

10

>>> from datetime import datetime

>>>

>>> now = datetime.now()

>>>

>>> now

datetime.datetime(2025, 5, 15, 17, 42, 6, 490934)

>>> formatted_time = f"{now:%Y-%m-%d %H:%M:%S}"

>>> print(formatted_time)

2025-05-15 17:42:06

>>>

3.综合使用

浮点数填充到20位中间对齐保留2位小数点

1

2

3

4

>>> a = 3.1415926

 

???????>>> print(f"{a:-^20.2f}")

--------3.14--------

整数填充到30位右对齐转换成十六进制

1

2

3

4

>>> a = 378297640000

 

???????>>> print(f"{a:+>30x}")

++++++++++++++++++++58144be440

原文链接:
相关文章
最新更新