网站首页 > 基础教程 正文
对于开发的同学来说,字符串我们每天都在接触。本文将介绍 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 函数进行格式化
猜你喜欢
- 2024-10-12 python学习笔记:格式化字符串的三种方法
- 2024-10-12 一文搞懂Python字符串格式化 python格式化输出字符串
- 2024-10-12 「Python变量与数据类型」格式化输出变量的值
- 2024-10-12 python %s格式化输出的五种用法,实例详解
- 2024-10-12 「万能Python」-09-格式化输入输出
- 2024-10-12 Python中如何实现数字的格式化输出?
- 2024-10-12 Python 字符串格式化指南 python+字符串格式化指南详解
- 2024-10-12 Python学习,字符串格式化方法不止%和farmat,还有f-string
- 2024-10-12 python基础篇:字符串的格式化 python格式化字符串
- 2024-10-12 简单学Python——格式化输出2(“%”占位法2)
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- mysql教程 (60)
- pythonif (86)
- location.href (69)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)