Python 中 4 种格式化字符串的方法
off999 2024-09-18 22:35 29 浏览 0 评论
对于开发的同学来说,字符串我们每天都在接触。本文将介绍 Python 中 4 种主要的格式化字符串的方法。当然,在文章最后,我会给大家一个简单的思路去判断什么时候用哪一种方法比较合适。
为了便于说明,假定已经有了如下变量
我们最终需要打印的字符串类似这样
0x00 用 % 操作符进行格式化
Python 内置有操作符 % ,使用这个符号你能比较方便的根据位置对字符串进行格式化。如果你之前接触过 C ,那么你会觉得这和 printf 函数比较类似。下面有个简单的例子
这里用 %s 格式说明符来告诉 Python 这个位置要填入一个字符串,它的值是 name 。
当然还有其它类型的格式说明符可以控制字符的输出形式,比如可以将数字以十六进制的形式打印出来,也可以添加空格等符号让排版更好看。
现在,我们用 %x 把一个数字转化为十六进制,然后打印出来
如果你想填充多个变量,很简单,把变量按顺序放在一个元祖里就可以了,就像这样
当然,如果你觉得按顺序不太方便,你也可以给占位符命名,然后填充
这种方式呢,以后维护起来更容易一些,毕竟,不用按顺序去慢慢对应占位符与变量。
0x01 用 str.format 进行格式化
Python 3 引入了一种新的格式化方法,和 % 类似,也能轻松的根据位置来进行格式化
同样也可以使用占位符
值得注意的是,这里将数字转化为十六进制的时候使用的 :x 后缀。这种使用函数格式化字符串的方法,相比使用 % 的那一种,写起来更方便一些。
0x02 用 f'...' 进行字符串插值
这个是 Python 3.6 才引入的,这种形式可以将变量直接写在字符串里来解析,看个例子
这种方式更加简单粗暴,极大的增强了可读性。
这种方式,Python 是如何解析的呢?其实很简单,就是将 f'...' 这个串转化为一系列的字面字符串与变量,然后使用 + 号连接起来。
假设我们现在有这么一个函数
函数里面对 f'...' 怎么解析的呢,其实就是这样
当然,Python 实际解析中肯定要比这个快很多,毕竟是在底层作的相应的优化,这里大概说下实现的思路。
简单的列下代码分析结果
看来上面的思路没有问题。
有人想说,类似数字转十六进制怎么玩呢。简单
加个 :#x 后缀就搞定了。
0x03 字符串模版
字符串模版用起来可能相比于上面的形式要麻烦一些,来看一个例子
一方面,字符串模版会使用到 string 模块。另一方面,字符串模版不能使用格式符,比如,如果我们想要将数字转为十六进制时,得自己调用函数处理。
当然并不是说这种格式化方法没有用处,在很多地方它也是很有意义的。
如果某些格式化字符串需要用户自己书写,那这就有潜在的风险了。如果是个恶意用户,他写的格式化串可能是这样的
呀呀呀,一不小心,重要信息就泄漏了。
但是如果使用的是字符串模板呢
嘿嘿,就不会有这种问题了。
0x04 怎么选择
有这么多字符串格式化方法,那么我们需要的时候该怎么选择呢?可以参考下下面这张图。
也就是说,如果需要用户手动输入那就用字符串模板
Python 2 直接用 % 进行格式化
Python 3.6 及以上使用 f'...' 进行字符串插值,以下用 str.format 函数进行格式化
相关推荐
- python import 出现 ModuleNotFoundError 解决方法
-
错误的原因是你的Python环境没有正确安装库文件。本文以Scapy为例,给出详细方案:1.确认是否成功安装Scapy运行以下命令检查Scapy是否已安装:pip3list|gre...
- Github 7.4k star,一个强大的 Python 库-sh!
-
大家好,今天为大家分享一个强大的Python库-sh。Github地址:https://github.com/amoffat/shsh库是Python生态系统中一个专门用于执行系统命令的第三方...
- 学习编程第148天 python编程循环的嵌套使用
-
今天学习的是刘金玉老师零基础Python教程第32期,主要内容是python编程循环的嵌套使用。(一)一维数组及输出#一维数组list1=["110001","四川二流子...
- 2025-07-09:使数组元素互不相同所需的最少操作次数。用go语言,
-
2025-07-09:使数组元素互不相同所需的最少操作次数。用go语言,给定一个整数数组nums和一个整数k,对于数组中的每个元素,你最多可以对其进行一次操作:将一个在区间[-k,k]内的...
- python数据分析numpy基础之max求数组最大值
-
1python数据分析numpy基础之max求数组最大值python的numpy库的max()函数,用于计算沿指定轴(一个轴或多个轴)的最大值。用法numpy.max(a,axis=None,...
- 加快Python算法的四个方法(四)Dask
-
CDA数据分析师出品相信大家在做一些算法经常会被庞大的数据量所造成的超多计算量需要的时间而折磨的痛苦不已,接下来我们围绕四个方法来帮助大家加快一下Python的计算时间,减少大家在算法上的等待时间。...
- 六十六、Leetcode数组系列(中篇)(leetcode679)
-
@Author:Runsen@Date:2020/6/8人生最重要的不是所站的位置,而是内心所朝的方向。只要我在每篇博文中写得自己体会,修炼身心;在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰难...
- Numpy中的ndarray是什么?('numpy.ndarray' object has no attribute 'append')
-
1.创建ndarray创建数组最简单的办法就是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的Numpy数组。np.array会尝试为新建的这个数组推断出一个...
- Python中的数据导入与查询(python怎样导入数据库)
-
适用场景:快速导入文本/Excel数据→Pandas读取大型数值数据→Numpy处理复杂二进制文件→h5py/scipy.io数据库交互→SQLAlchemy+Pandas一、数据...
- 2025-07-02:统计数组中的美丽分割。用go语言,给定一个整数数组
-
2025-07-02:统计数组中的美丽分割。用go语言,给定一个整数数组nums,我们要把它划分成三个连续且非空的子数组nums1、nums2、nums3,且这三个子数组按顺序拼接后还原为原数组...
- 2025-07-10:字符相同的最短子字符串Ⅰ。用go语言,给定一个长度
-
2025-07-10:字符相同的最短子字符串Ⅰ。用go语言,给定一个长度为n的二进制字符串s和一个允许执行的最大操作次数numOps。每次操作可以选择字符串中的任意一个位置i(0≤i...
- 2025-06-19:识别数组中的最大异常值。用go语言,你有一个长度为
-
2025-06-19:识别数组中的最大异常值。用go语言,你有一个长度为n的整数数组nums,其中恰好有n-2个元素属于“特殊数字”类别。剩下的两个元素中,一个等于所有这些特殊数字的总和,另...
- 2025-06-28:长度可被 K 整除的子数组的最大元素和。用go语言,给
-
2025-06-28:长度可被K整除的子数组的最大元素和。用go语言,给定一个整数数组nums和一个整数k,求nums中长度为k的倍数的非空子数组中,子数组和的最大值。返回该最大和...
- 在 Python 中如何向一个已排序的数组(列表) 中插入一个数呢
-
在Python中如何向一个已排序的数组(列表)中插入一个数呢?方法有很多种,关键在于原来数组是什么样的排序,用到啥排序方法效率高,就用哪种。我们来练习其中的几种插入方法,另外也掌握下遍历数组的...
- 2025-07-04:统计符合条件长度为 3 的子数组数目。用go语言,给定
-
2025-07-04:统计符合条件长度为3的子数组数目。用go语言,给定一个整数数组nums,请你计算有多少个长度恰好为3的连续子数组满足这样的条件:子数组的第一个元素与第三个元素的和,正好...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- python import 出现 ModuleNotFoundError 解决方法
- Github 7.4k star,一个强大的 Python 库-sh!
- 学习编程第148天 python编程循环的嵌套使用
- 2025-07-09:使数组元素互不相同所需的最少操作次数。用go语言,
- python数据分析numpy基础之max求数组最大值
- 加快Python算法的四个方法(四)Dask
- 六十六、Leetcode数组系列(中篇)(leetcode679)
- Numpy中的ndarray是什么?('numpy.ndarray' object has no attribute 'append')
- Python中的数据导入与查询(python怎样导入数据库)
- 2025-07-02:统计数组中的美丽分割。用go语言,给定一个整数数组
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)