字符串格式化相当于字符串模板。也就是说,如果一个字符串有一部分是固定的,而另一部分是动态变化的,那么就可以将固定的部分做成模板,然后那些动态变化的部分使用字符串格式化操作符(%) 替换。

如一句问候语:“Hello 李宁”,其中“Hello”是固定的,但“李宁”可能变成任何一个人的名字,如“乔布斯”,所以在这个字符串中,“Hello”是固定的部分,而“李宁”是动态变化的部分,因此,需要用“%”操作符替换“李宁”,这样就形成了一个模板。

Hello %s

上面的代码中,“%”后面的s是什么呢?其实字符串格式化操作符后面需要跟着动态值的数据类型,以及更细节的格式(如对于浮点数来说,小数点后要保留几位),这里的“%s”表示动态部分要被替换成字符串类型的值。

如果在字符串模板中有多个要被替换的部分,需要按顺序用“%”表示,然后在格式化字符串时,传入的值也要符合这个顺序。下面的代码演示了格式化字符串的基本用法。

formatStr = "Hello %s. Today is %s, Are there any activities today?"
#  初始化字符串格式化参数值,此处必须使用元组,不能使用列表
values = ('Mike', 'Wednesday')
#  格式化字符串
print(formatStr % values)

运行结果如下图所示:

从上面的代码可以看出,不仅在为字符串模板指定格式化参数时要使用百分号(%),在格式化字符串时,也要像取模一样使用“%”操作符。还有就是指定字符串格式化参数值要使用元组,在这里不能使用列表。

1. 模板字符串

在string模块中提供了一个用于格式化字符串的Template类,该类的功能是用同一个值替换所有相同的格式化参数。Template类的格式化参数用美元符号($)开头,后面跟着格式化参数名称,相当于变量名。在格式化时,需要使用Template类的substitute方法,该方法用于指定格式化参数对应的值。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from string import Template
template = Template("$s $s $s ")
template.substitute(s = "Hello")

在上面的代码中,通过Template类的构造方法传入了一个格式化字符串,在这个格式化字符串中包含了3个“$s”,然后调用了substitute方法格式化这个字符串,该方法指定了s参数值为“Hello”,最后的替换结果是“Hello Hello Hello”,也就是说,在格式化字符串中,有多少个“$s”,就替换多少个“$s”。

下面的代码完整地演示了如何使用Template类格式化字符串。

# 引用string模块中的Template类
from string import Template
template1 = Template("$s是我最喜欢的编程语言, $s非常容易学习,而且功能强大")
# 指定格式化参数s的值是Python
print(template1.substitute(s='Python'))
# 当格式化参数是一个字符串的一部分时,为了和字符串的其他部分区分开,
# 需要用一对大括号将格式化参数变量括起来
template2 = Template("${s}stitute")
print(template2.substitute(s='sub'))template3 = Template("$dollar$$相当于多少$pounds")
# 替换两个格式化参数变量
print(template3.substitute(dollar=20,pounds='英磅'))template4 = Template("$dollar$$相当于多少$pounds")
data = {}
data['dollar'] = 100
data['pounds'] = '英磅'
# 使用字典指定格式化参数值
print(template4.substitute(data))

运行结果如下图所示:

2. 字符串的format方法

字符串本身也有一个format方法用于格式化当前的字符串。这个format方法和前面讲的格式化操作符(%)不太一样。字符串格式化参数并不是用百分号(%)表示,而是用一对大括号({}),而且支持按顺序指定格式化参数值和关键字格式化参数。

例如,下面的代码通过format方法按顺序为格式化字符串指定了参数值。

print("{} {} {}".format(1,2,3)) # 运行结果:1 2 3

我们可以看到,上面的代码在字符串中指定了3对空的大括号,这代表3个格式化参数,不需要指定数据类型,可以向其传递Python语言支持的任何值。通过format方法传入3个值(1,2,3),这3个值会按顺序替换格式化字符串中的3对空的大括号。

命名格式化参数是指在一对大括号中指定一个名称,然后调用format方法时也要指定这个名称。

print("{a}  {b}  {c}".format(a = 1,c = 2,b = 3))   # 运行结果:1  3  2

上面的代码在3对大括号中分别添加了“a”、“b”、“c”。通过format方法指定了这3个关键字参数的值。我们可以看到,并没有按顺序指定关键字参数的值。这也是使用关键字参数的好处,只要名字正确,fomat参数的顺序可以任意指定。

当然,顺序方式和关键字参数方式可以混合使用,而且还可以指定顺序方式中格式化参数从format方法提取参数值的顺序,甚至可以取format方法参数值的一部分。

3. 更进一步控制字符串格式化参数

format方法的功能远不止这些,在一对大括号中添加一些字符串格式化类型符,可以对格式化字符串进行更多的控制。例如,下面的代码会将一个字符串类型的格式化参数值按原样输出、通过repr函数输出,以及输出其Unicode编码。

print("{first!s} {first!r} {first!a}".format(first = "中"))

执行这行代码,会输出如下的结果。

中 '中' '\u4e2d'

除此之外,format方法还支持很多其他的控制符,例如,可以将整数按浮点数输出,也可以将十进制数按二进制、八进制、十六进制格式输出。下面的代码为我们演示了如何使用这些控制符格式化字符串。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 运行结果:原样输出:中  调用repr函数:'中'  输出Unicode编码:'\u4e2d'
print("原样输出:{first!s}  调用repr函数:{first!r}  输出Unicode编码:{first!a}".format(first = "中"))
#  将21按浮点数输出,运行结果:整数:21  浮点数:21.000000
print("整数:{num}  浮点数:{num:f}".format(num = 21))
#  将56按十进制、二进制、八进制和十六进制格式输出
#  运行结果:十进制:56  二进制:111000  八进制:70  十六进制:38
print("十进制:{num}  二进制:{num:b}  八进制:{num:o}  十六进制:{num:x}".format(num = 56))
#  将533按科学计数法格式输出,运行结果:科学计数法:5.330000e+02
print("科学计数法:{num:e}".format(num = 533))
#  将0.56按百分比格式输出,运行结果:百分比:56.000000%
print("百分比:{num:%}".format(num = 0.56))

运行结果如下图所示。

4. 字段宽度、精度和千位分隔符

在前面讲到使用format方法可以让待格式化的值左侧或右侧补空格,不过这种填空格的效果看上去并不美观,而且一般的用户也分不清前面或后面到底有多少个空格。所以最合适的方式就是在值的前面或后面补0。例如,如果写一本书,章节超过了10章,为了让每一章的序号长度都一样,可以使用01、02、03、…、11、12这样的格式。

对于10以后的章节,按原样输出即可。不过对于10以下的章节,就需要在数字前面补一个0了。要实现这个功能,就需要使用{chapter:02.0f}来格式化章节序号。其中chapter是格式化参数,第一个0表示如果位数不足;前面要补0,2表示整数部分是2位数字;第2个0表示小数部分被忽略;f表示以浮点数形式格式化chapter指定的值。

#  运行结果:第04章
print("第{chapter:02.0f}章".format(chapter = 4));

如果想用format方法控制值的左、中、右对齐,可以分别使用“<”,“^”和“>”。

# 让1、2、3分别以左对齐、中对齐和右对齐方式显示
print('{:<10.2f}\n{:^10.2f}\n{:>10.2f}'.format(1,2,3))

不管是哪种方式对齐(左、中、右),在很多情况下,值的总长度要比指定宽度小,在默认情况下,不足的位要补空格,但我们也可以通过在“<”、“^”和“>”前面加符号,让这些不足的位用这些符号替代空格补齐。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# “井号”在宽度为20的区域内中心对齐,并左右两侧添加若干个井号(#),两侧各添加8个井号
#  运行结果:######## 井号 ########
print("{:#^20}".format(" 井号 "))

对于需要在前面显示负号的数值,如-3、-5。可以通过在等号(=)前面加上字符,以便在负号和数值之间加上特殊符号。

# 在5.43和负号(-)之间显示“^”,运行结果:-^^^^^5.43
print("{0:^=10.2f}".format(-5.43))

最后让我们来讨论一下进制转换。如果将10进制分别转换为二进制、八进制和十六进制的数,需要分别使用“b”、“o”和“x”类型符。如下面的代码将43转换为二进制的数。

#  运行结果:101011
print("{:b}".format(43))

5. f字符串

在新版的Python中,提供了一种f字符串。也就是在字符串之前加一个f,这样在字符串中就可以直接使用外部变量了,只不过变量要使用一对大括号括起来。代码如下:

name = 'Bill'
age = 30print(f'姓名:{name}, 年龄:{age}')

Python格式化字符串知多少相关推荐

  1. python 格式化字符串长度_python-格式化字符串

    python格式化字符串有两种方式: 1.百分号形式(%):默认右对齐   "-"表示多对齐 常用的类型码: s -->字符串 d---->数字   f--->浮 ...

  2. Python格式化字符串字面值 | 被官方文档称之为『漂亮』的输出格式

    Python格式化字符串字面值 | 被官方文档称之为『漂亮』的输出格式 本文参考输入输出 - Python 3.7.10 文档.首先声明咱的实验环境. ❯ python --version Pytho ...

  3. Python格式化字符串新语法:f-strings

    Python格式化字符串新语法:f-strings 原文地址: https://www.zhblog.net/go/python/advanced/python-fstrings?t=562 从Pyt ...

  4. Python格式化字符串的4种方式

    文章目录 Python格式化字符串的4种方式 一:%号 二:str.format 三:f-Strings 四:标准库模板 五:总结四种方式的应用场景 Python格式化字符串的4种方式 一:%号 %号 ...

  5. python格式化字符串的三种方法(%,format,f-string)

    DAY 7. 格式化字符串 到目前为止,我所知道的,python格式化字符串有三种方法,第一是早期就有的%,其次是2.5之后的format(),还有就是3.6添加的f字符串调试 7.1 %格式化字符串 ...

  6. python 格式化字符串_Python格式化字符串常用操作

    前言 字符串的格式化.以及增.删.改.查.并.分,无论写什么程序都是一个非常重要的操作,熟练的使用可以让程序变得整洁,对于输出结果的格式能很好的统一性. 0 1 格式化字符串 在python的2.x版 ...

  7. python格式化字符串漏洞_Python新型字符串格式漏洞分析及解决方案

    最近一个python字符串格式化的漏洞引起了我的注意,今天就来说一下Python引入的一种格式化字符串的新型语法的安全漏洞进行了深入的分析,并提供了相应的安全解决方案. 当我们对不可信的用户输入使用s ...

  8. python 格式化字符串_Python字符串三种格式化输出

    字符串格式化输出是python非常重要的基础语法,今天就把三种格式化输出做一个简单的总结,希望对大家有帮助. 格式化输出:内容按照一定格式要求进行输出. 1.使用占位符%输出 python2.6版本之 ...

  9. python格式化字符串_阿博的Python之路详解String数据类型

    这是阿博的第16篇文章 之前分享了Python的Number数据类型,今天给大家详细讲一下我学习到Python的String数据类型.在日常开发当中String类型应该是我们最常使用到的数据类型,那么 ...

最新文章

  1. JAVA中0 结果_Java练习题-求1000!的结果中包含多少个0
  2. win messenger启动随outlook explorer
  3. 如何check out Visual Studio 之外修改的文件。
  4. 一个测试工程师面试官的真实分享!个人超赞同!
  5. mysql 外键 失败_存在外键时,MySQL 5.5外键约束失败
  6. MySQL 中视图和表的区别以及联系是什么?
  7. MySQL 高阶语句
  8. 四面体的表面积_如何求正四面体的体积和表面积?
  9. swiper、vue-awsome-swiper插件使用
  10. 【小教程】Ubuntu ASF steam自动挂卡
  11. IBM X3650 M4服务器数据恢复成功案例
  12. 阿里技术专家:一文教你高效画出技术架构图
  13. C语言课题1:猜数字游戏【从基础开始手把手教你】
  14. APP是怎么精确统计下载数量?
  15. 英国高技术型人才流失严重 达到50年之最
  16. C 语言项目中.h文件和.c文件的关系
  17. 离散数学:集合论的代数化样例
  18. 女生读计算机还是经济学,女生最吃香的十大专业你知道是什么吗?女生一定要懂...
  19. 【2】STM8——————STVD+Cosmic编译环境下查看代码的实际长度
  20. 美国高清晕渲地形图分享,每一幅都值得珍藏

热门文章

  1. NoMasp博客导读
  2. MongoDB学习系列6: mongodump
  3. 数据结构读书笔记(三)(C语言)
  4. 对称加密(4) NET对称加密实践
  5. oracle sequrnce_OracleSql语句学习(五)
  6. FAGLFLEXA 表和 BSEG 表有什么区别
  7. 初识OneNote 2016
  8. SAP 固定资产减值准备配置及期初导入
  9. SAP MM 库存初始化和批量扩充物料仓位
  10. smartforms金额或者数量字段显示不出来