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

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 格式化字符串的完整格式说明是通过冒号(:)后面的格式规范符来实现的。这个格式化规范符可以用来控制数字、字符串、时间日期等数据类型的输出格式。以下是完整的格式说明,包括常见的格式化选项及其用法。
f"{expression:{flags}{width}{precision}{type}}"
- expression: 要格式化的值(例如数字、字符串等)。
- flags: 用于指定填充方式、对齐方式等。
- width: 输出的最小宽度。如果输出的值宽度小于指定的宽度,则会进行填充。
- precision: 用于控制浮动点数的小数点精度或其他数值精度。
- type: 用于指定格式类型,例如浮动点数、整数、字符串等。
简单使用
f-string用大括号 {} 表示被替换字段,其中直接填入替换内容:
>>> 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'
注意:不管变量的类型是什么,最后都会得到字符串类型的结果
使用方法
宽度控制
使用f-string最常见的就是控制变量精度和输出宽度
| 格式描述符 | 含义与作用 | |
|---|---|---|
| width | 整数 width 指定宽度 | 0width:整数 width 指定宽度,开头的 0 指定高位用 0 补足宽度 |
| width.precision | 整数 width 指定宽度,整数 precision 指定显示精度 |
以圆点为分割,圆点之前控制输出宽度,原点之后控制输出精度。
控制输出宽度,不管是数值类型和字符串类型都可以。语法:f"{变量: 宽度}"
- 指定宽度小于变量宽度:正常输出
- 指定宽度大于变量宽度:输出指定宽度,以空格补齐。字符串右补齐,数值左补齐
>>> 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补齐
>>> a = 3.1415926
>>> print(f"{a:020}")
000000000003.1415926
>>>
精度控制
数值
整型和浮点数使用f-string可以控制输出的精度。语法是 f"{变量: .4f}",其中4f是指小数点后的位数,可以实现精度截断或扩充。其中截断的规则是四舍五入,扩充是将精度增加到指定位数
>>> 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可以省略,可以实现截断,但不会填充。设置的长度大于变量长度,输出仍然是变量的长度。
>>> 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
可以同时控制宽度和精度
>>> a = 3.1415926
>>> print(f"{a:14.4f}")
3.1416
>>> c = "hello world"
>>> print(f"{c:25.4s}")
hell
对齐
对齐是指输出时当指定宽度大于变量宽度时如何显示,可以选择的包括:
>: 右对齐<: 左对齐 (默认行为)^: 居中对齐
>>> 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
填充
在对齐时默认使用空格填充,也可以使用指定字符填充。使用语法 **f"{变量: 填充字符<宽度}" **,填充字符常见:-、+、*、0等等
>>> 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
数据格式
类型标识符 (type) 类型标识符决定了如何表示和格式化数值、字符串等常见数据类型。常见的类型标识符包括:
- s: 字符串。
- b: 二进制整数格式
- d: 十进制整数(整数)
- o: 八进制整数格式
- x: 十六进制小写。
- X: 十六进制大写。
- c: 字符格式,按unicode编码将整数转换为对应字符
- f: 浮动点数(默认的浮动点数)。
- e: 科学计数法表示浮动点数。
- g: 科学计数法或浮动点数(根据精度选择合适格式)。
- %: 百分比格式,将浮动点数乘以 100 并附加 % 符号。
数值转十进制
>>> value = 0xff
>>> value
255
>>> print(f"{value:d}")
255
进制转换
>>> a = 378297640000
>>>
# 10转2
>>> print(f"{a:b}")
101100000010100010010111110010001000000
# 10转8
>>> print(f"{a:d}")
378297640000
# 10转16
>>> print(f"{a:x}")
58144be440
默认不添加进制的前缀,使用# 可以添加
>>> a = 378297640000
>>> print(f"{a:#b}")
0b101100000010100010010111110010001000000
>>> print(f"{a:#d}")
378297640000
>>> print(f"{a:#x}")
0x58144be440
>>> print(f"{a:#X}")
0X58144BE440
变量转浮点数
>>> value = 0xff
>>> print(f"{value:f}")
255.000000
>>>
将整数转换为unicode编码对应字符
>>> a = 69
>>> print(f"{a:c}")
E
>>> a = 290
>>> print(f"{a:c}")
Ģ
>>> a = 2736
>>> print(f"{a:c}")
ર
科学计数法
>>> a = 378297640000
>>>
>>> print(f"{a:e}")
3.782976e+11
>>> b = -0.132465
>>>
>>> print(f"{b:e}")
-1.324650e-01
百分号
将浮动点数乘以 100 并附加 % 符号
>>> a = 0.5473
>>> print(f"{a:%}")
54.730000%
时间格式
fstring 以通过结合 datetime 模块来实现时间的格式化。更多格式可自行查阅。
>>> 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
>>>
综合使用
浮点数填充到20位中间对齐保留2位小数点
>>> a = 3.1415926
>>> print(f"{a:-^20.2f}")
--------3.14--------
整数填充到30位右对齐转换成十六进制
>>> a = 378297640000
>>> print(f"{a:+>30x}")
++++++++++++++++++++58144be440
参考:
https://www.wangxhub.com/2024/12/08/python-f-string-format/
https://blog.csdn.net/sunxb10/article/details/81036693
f-string 高效的字符串格式化的更多相关文章
- 【转载】C#string.Formart的字符串格式化
String.Format 方法的几种定义: String.Format (String, Object) 将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项.Stri ...
- 读完这一篇,字符串格式化界的“白富美”(f-strings)抱回家!
f-strings 从Python 3.6开始,新引入了一种字符串格式化方法,称为“格式化字符串常量”(formatted string literal),简称f-strings.相比于%.str.f ...
- JAVA字符串格式化-String.format()的使用(转)
常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重 ...
- Java字符串格式化String.format常用用法
常规的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形 ...
- Java系列: JAVA字符串格式化-String.format()的使用(zz)
常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重 ...
- JAVA字符串格式化String.format()的使用
JAVA字符串格式化-String.format()的使用常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprin ...
- JAVA字符串格式化-String.format()的使用 (转载)
常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重 ...
- 【转】JAVA字符串格式化-String.format()的使用--不错
原文网址:http://blog.csdn.net/lonely_fireworks/article/details/7962171 常规类型的格式化 String类的format()方法用于创建格式 ...
- 【转】JAVA字符串格式化-String.format()的使用
原文网址:http://blog.csdn.net/lonely_fireworks/article/details/7962171 常规类型的格式化 String类的format()方法用于创建格式 ...
- JAVA字符串格式化-String.format()使用
传统型格类型 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象. 熟悉C语言的同学应该记得C语言的sprintf()方法.两者有类似之处.format()方法有两种重载 ...
随机推荐
- zabbix - [03] 安装部署
参考:https://www.yuque.com/fenghuo-tbnd9/ffmkvs zabbix6要求操作系统为Centos8,所以一开始安装部署的时候发现少了zabbix-server-my ...
- 重生之数据结构与算法----队列&栈
简介 上文说到,数据结构只有两种.其它的数据结构都是它的整花活. 栈 栈只能在表的一端(称为栈顶)进行插入和删除操作,遵循 "后进先出"(Last In First Out,LIF ...
- 终于写完轮子一部分:tcp代理 了,记录一下
24年终自己立了flag: 25年做些轮子玩(用于浪费生命,赚不了钱) 所以25年就准备用c#写一个网络代理NZOrz(nginx知道吧,就那玩意儿干的事),包含 udp/tcp/http1 2 3, ...
- 强!10.8K star!推荐一款用于威胁预防、安全检测的开源监控平台,功能非常强大!!
在当今数字化时代,网络安全威胁日益严峻,企业和组织对于高效.强大的安全解决方案的需求也愈发迫切. 今天给大家分享一个专注于安全监控的开源项目:Wazuh,正是应对这一挑战的有力武器,专门用于帮助个人和 ...
- python 打开yaml文件提示Empty test suite.
网上方案: 我自己: 将test改为其他名称开头即可 读取成功
- 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
目录 什么是 Selenium 环境搭建与配置 安装 Selenium 下载浏览器驱动 基础操作 启动浏览器并访问网页 定位网页元素 通过 ID 定位 通过 CSS 选择器定位 通过 XPath 定位 ...
- CORS 跨域请求一种解决方案
平常工作难遇到这类问题, 一般搭建新系统或搭建系统二时需要复用系统一一些前后端能力, 可能会遇到跨域拦截问题. 这里提供一种基于服务器解决方案. 更多其他方案, 详细细节可自行查阅更多资料, 写一些前 ...
- mac brew 安装
Homebrew国内源 知乎文章地址:https://zhuanlan.zhihu.com/p/111014448 苹果电脑安装脚本: /bin/zsh -c "$(curl -fsSL h ...
- windows 10 平台使用命令行批量获取一个文件夹下所有文件的路径
1 打开命令行, 定位路径到指定磁盘 2 使用cd命令定位到指定路径 3 输入以下命令, 想要的结果就保存在了filename.txt中 dir /b/s filename.txt 结果:
- BUUCTF---rsa_output
题目 点击查看代码 {21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416 ...