找回密码
 立即注册
首页 业界区 业界 f-string 高效的字符串格式化

f-string 高效的字符串格式化

荡俊屯 2025-6-3 00:09:06
1.png

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

  • 占位符 例如 print("my name is " % "hanmeimei")
  • format  例如 print("my name is {}".format("hanmeimei"))
  • f-string  例如 print(f"my name is {'hanmeimei'}")
其中f-string是推荐的最清晰,效率最高的方法。本篇主要讲解f-string常见的使用方法。
语法

f-string采用content:format} 设置字符串格式,其中 content 是替换并填入字符串的内容,可以是变量、表达式、函数等,format 是格式描述符,可以省略。
Python f-string 格式化字符串的完整格式说明是通过冒号(:)后面的格式规范符来实现的。这个格式化规范符可以用来控制数字、字符串、时间日期等数据类型的输出格式。以下是完整的格式说明,包括常见的格式化选项及其用法。
  1. f"{expression:{flags}{width}{precision}{type}}"
复制代码

  • expression: 要格式化的值(例如数字、字符串等)。
  • flags: 用于指定填充方式、对齐方式等。
  • width: 输出的最小宽度。如果输出的值宽度小于指定的宽度,则会进行填充。
  • precision: 用于控制浮动点数的小数点精度或其他数值精度。
  • type: 用于指定格式类型,例如浮动点数、整数、字符串等。

简单使用
f-string用大括号 {} 表示被替换字段,其中直接填入替换内容:
  1. >>> name = 'Eric'
  2. >>> f'Hello, my name is {name}'
  3. 'Hello, my name is Eric'
  4. >>> number = 7
  5. >>> f'My lucky number is {number}'
  6. 'My lucky number is 7'
  7. >>> price = 19.99
  8. >>> f'The price of this book is {price}'
  9. 'The price of this book is 19.99'
复制代码
注意:不管变量的类型是什么,最后都会得到字符串类型的结果
使用方法

宽度控制

使用f-string最常见的就是控制变量精度和输出宽度
格式描述符含义与作用width整数 width 指定宽度0width:整数 width 指定宽度,开头的 0 指定高位用 0 补足宽度width.precision整数 width 指定宽度,整数 precision 指定显示精度以圆点为分割,圆点之前控制输出宽度,原点之后控制输出精度。
控制输出宽度,不管是数值类型和字符串类型都可以。语法:f"{变量: 宽度}"

  • 指定宽度小于变量宽度:正常输出
  • 指定宽度大于变量宽度:输出指定宽度,以空格补齐。字符串右补齐,数值左补齐
  1. >>> a = 3.1415926
  2. # 变量宽度9,指定宽度20,数值左补齐
  3. >>> print(f"{a:20}")
  4.            3.1415926
  5. >>> print(len(f"{a:20}"))
  6. 20
  7. >>> c = "hello world"
  8. >>> print(f"{c:5}")
  9. hello world
  10. >>> print(f"{c:25}")
  11. hello world         
  12. # 变量只有11个字符串,指定宽度为25,输出长度为25,以空格补齐
  13. >>> print(len(f"{c:25}"))
  14. 25
复制代码
有一个特别使用f"{变量: 0宽度}",在宽度前面加0可以实现变量显示前面用0补齐
  1. >>> a = 3.1415926
  2. >>> print(f"{a:020}")
  3. 000000000003.1415926
  4. >>>
复制代码
精度控制

数值
整型和浮点数使用f-string可以控制输出的精度。语法是 f"{变量: .4f}",其中4f是指小数点后的位数,可以实现精度截断或扩充。其中截断的规则是四舍五入,扩充是将精度增加到指定位数
  1. >>> a = 3.1415926
  2. >>> print(f"{a:.4f}")
  3. 3.1416
  4. >>> b = 100
  5. >>> print(f"{b}")
  6. '100'
  7. >>> print(f"{b:.6f}")
  8. '100.000000'
  9. >>>
复制代码
字符串
字符串同样可以控制输出精度,使用语法** f"{变量:.4s}"**, 其中4s指字符串的长度,s可以省略,可以实现截断,但不会填充。设置的长度大于变量长度,输出仍然是变量的长度。
  1. >>> c = "hello world"
  2. >>> print(f"{c:.2}")
  3. he
  4. >>> print(f"{c:.10s}")
  5. hello worl
  6.    
  7. >>> print(f"{c:.5s}")
  8. hello
  9. # 精度超出长度不会填充
  10. >>> print(f"{c:.20s}")
  11. hello world
  12. >>> print(len(f"{c:.20s}"))
  13. 11
复制代码
可以同时控制宽度和精度
  1. >>> a = 3.1415926
  2. >>> print(f"{a:14.4f}")
  3.         3.1416
  4. >>> c = "hello world"
  5. >>> print(f"{c:25.4s}")
  6. hell
复制代码
对齐

对齐是指输出时当指定宽度大于变量宽度时如何显示,可以选择的包括:
<ul>>: 右对齐
>> 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     [/code]填充


在对齐时默认使用空格填充,也可以使用指定字符填充。使用语法 **f"{变量: 填充字符20}")---------hello world>>> >>> print(f"{c:-^20}")----hello world----->>> print(f"{c:*^20}")****hello world*****>>> print(f"{c:0^20}")0000hello world00000[/code]数据格式

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

  • s: 字符串。
  • b: 二进制整数格式
  • d: 十进制整数(整数)
  • o: 八进制整数格式
  • x: 十六进制小写。
  • X: 十六进制大写。
  • c: 字符格式,按unicode编码将整数转换为对应字符
  • f: 浮动点数(默认的浮动点数)。
  • e: 科学计数法表示浮动点数。
  • g: 科学计数法或浮动点数(根据精度选择合适格式)。
  • %: 百分比格式,将浮动点数乘以 100 并附加 % 符号。
数值转十进制
  1. >>> c = "hello world"
  2. # 设置宽度之后就会出现空格填充,字符串默认右填充即左对齐
  3. >>> print(f"{c:20}")
  4. hello world         
  5. >>> print(len(f"{c:20}"))
  6. 20
  7. >>> print(f"{c:<20}")
  8. hello world         
  9. >>>
  10. >>> print(f"{c:>20}")
  11.          hello world
  12. >>> print(f"{c:^20}")
  13.     hello world     
复制代码
进制转换
  1. >>> c = "hello world"
  2. >>> print(f"{c:<20}")
  3. hello world         
  4. >>> print(f"{c:-<20}")
  5. hello world---------
  6. >>> print(f"{c:->20}")
  7. ---------hello world
  8. >>>
  9. >>> print(f"{c:-^20}")
  10. ----hello world-----
  11. >>> print(f"{c:*^20}")
  12. ****hello world*****
  13. >>> print(f"{c:0^20}")
  14. 0000hello world00000
复制代码
默认不添加进制的前缀,使用# 可以添加
  1. >>> value = 0xff
  2. >>> value
  3. 255
  4. >>> print(f"{value:d}")
  5. 255
复制代码
变量转浮点数
  1. >>> a = 378297640000
  2. >>>
  3. # 10转2
  4. >>> print(f"{a:b}")
  5. 101100000010100010010111110010001000000
  6. # 10转8
  7. >>> print(f"{a:d}")
  8. 378297640000
  9. # 10转16
  10. >>> print(f"{a:x}")
  11. 58144be440
复制代码
将整数转换为unicode编码对应字符
  1. >>> a = 378297640000
  2. >>> print(f"{a:#b}")
  3. 0b101100000010100010010111110010001000000
  4. >>> print(f"{a:#d}")
  5. 378297640000
  6. >>> print(f"{a:#x}")
  7. 0x58144be440
  8. >>> print(f"{a:#X}")
  9. 0X58144BE440
复制代码
科学计数法
  1. >>> value = 0xff
  2. >>> print(f"{value:f}")
  3. 255.000000
  4. >>>
复制代码
百分号
将浮动点数乘以 100 并附加 % 符号
  1. >>> a = 69
  2. >>> print(f"{a:c}")
  3. E
  4. >>> a = 290
  5. >>> print(f"{a:c}")
  6. Ģ
  7. >>> a = 2736
  8. >>> print(f"{a:c}")
复制代码
时间格式

fstring 以通过结合 datetime 模块来实现时间的格式化。更多格式可自行查阅。
  1. >>> a = 378297640000
  2. >>>
  3. >>> print(f"{a:e}")
  4. 3.782976e+11
  5. >>> b = -0.132465
  6. >>>
  7. >>> print(f"{b:e}")
  8. -1.324650e-01
复制代码
综合使用

浮点数填充到20位中间对齐保留2位小数点
  1. >>> a = 0.5473
  2. >>> print(f"{a:%}")
  3. 54.730000%
复制代码
整数填充到30位右对齐转换成十六进制
  1. >>> from datetime import datetime
  2. >>>
  3. >>> now = datetime.now()
  4. >>>
  5. >>> now
  6. datetime.datetime(2025, 5, 15, 17, 42, 6, 490934)
  7. >>> formatted_time = f"{now:%Y-%m-%d %H:%M:%S}"
  8. >>> print(formatted_time)
  9. 2025-05-15 17:42:06
  10. >>>
复制代码
参考:
https://www.wangxhub.com/2024/12/08/python-f-string-format/
https://blog.csdn.net/sunxb10/article/details/81036693

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册