一、    引言

前面两节介绍的字符串格式化方法,都有其本身对应的缺陷,老猿不建议大家使用,之所以详细介绍主要是考虑历史代码的兼容性,方便大家理解前人留下的代码。老猿推荐大家新编码时使用format方法,因为该方法比前面2种方法更强大,也更容易理解。format方法是在Python2.6以后的版本才支持。

format格式字符串中使用大括号将格式符(也称为“转换说明符”、“替换字段”)括起来,对应的真实值通过format方法传递进来。format格式字符串有多种使用方法,我们接下来将逐一介绍。

二、    最简单的format方法进行字符串格式化

最简单的办法就是格式字符串中的每个格式符就是一个空的大括号,然后按照大括号出现的顺序逐一从format传入的参数中取值。

继续以上节的学生信息为例:

student={'name':'小明','class':'20190301','score':597.5}

print('{} 班 {} 同学,总分:{}'.format(student['class'],student['name'],student['score']))

或:

s='{} 班 {} 同学,总分:{}'

print(s.format(student['class'],student['name'],student['score']))

三、    使用索引方式的format方法进行字符串格式化

这里所说的索引就是format参数每个参数出现的顺序号,从0开始计数。在格式字符串中,格式符就是用大括号括起来的索引,因此无需按格式符出现顺序传入参数到format,也可以一个format参数在格式字符串中作为多个格式符对应真实值。

举例:

student={'name':'小明','class':'20190301','score':597.5}

print('{1} 班 {0} 同学,小名:{0},总分:{2}'.format(student['name'],student['class'], student['score']))

#输出:20190301 班 小明 同学,小名:小明,总分:597.5

上面介绍的最简单方法实际上是索引方式的一种特例,就是每个格式符内的索引自动在其前一个格式符基础加1,第一个格式符的索引为0。我们称上一种方式为自动编号索引format方法,而现在介绍的这种方法称为人工编号索引format方法。

注意:自动编号索引format方法和人工编号索引format方法二者不能混用!为什么呢?大家请想一想。

四、    使用关键字参数方式的format方法进行字符串格式化

使用关键字参数方式的format方法进行字符串格式化与使用模板字符串进行格式化方法的基础思想很像。

关键字参数方式就是在格式符内使用索引方式的format方法用索引的地方传入一个变量名,该变量名与使用模板字符串的$符号后面的关键字参数类似,后面在format参数中,使用:关键字参数=值的模式传入实际数据。

举例:

student={'name':'小明','class':'20190301','score':597.5}

print('{classno} 班 {name} 同学,小名:{name},总分:{score}'.format(classno=student['class'],name=student['name'],score=student['score']))

    输出内容为:20190301 班 小明 同学,小名:小明,总分:597.5

注意:与模板字符串法类似,这里的关键字参数使用的是”classno”,而不是”class”。

五、    使用关键字参数变量的属性或元素的format方法进行字符串格式化

除了一个个指定真实值对应的关键字参数外,还有一种方法可以简化format的参数,就是在格式化字符串中用点“.”或中括号“[]”来引用一个变量的属性或元素,而format只需要传入该变量就可以。

举例:

student={'name':'小明','class':'20190301','score':597.5}

s1='{st[class]}班{st[name]}总分:{st[score]}'.format(st=student)

执行后s1的内容为: '20190301班小明总分:597.5'

六、    使用format_map方法进行字符串格式化

对使用字典作为关键字参数而格式化字符串中使用字典键值获取真实值的情况,除了使用前面介绍的2种方法,还可以使用format_map方法。相对format方法,有如下变化:

1、    调用方法从format改成了format_map;

2、    格式化字符串从“变量[键]”值方式变成了“键”方式;

3、    format_map的参数不需传入“关键字=真实值”,而是直接传入真实的字典值。

举例说明如下:

如上面使用format的方法如下:

student={'name':'小明','class':'20190301','score':597.5}

s1='{st[class]}班{st[name]}总分:{st[score]}'.format(st=student)

改用format_map方法后代码如下:

student={'name':'小明','class':'20190301','score':597.5}

s1='{class}班{name}总分:{score}'.format_map(student)

执行结果都是:'20190301班小明总分:597.5'

七、    f字符串格式化方法

在Python 3.6中,如果关键字参数变量与替换字段同名,还可使用一种简写。在这种情况下,可使用f字符串——在字符串前面加上f,后面无需加format调用。

举例:   

classno,name,score=student['class'],student['name'],student['score']

s=f"{classno} 班 {name} 同学,小名:{name},总分:{score}"  #注意使用的是classno

print(s)  #输出:20190301 班 小明 同学,小名:小明,总分:597.5

这种方法也支持变量.属性、变量[索引]的方法传递数据。举例:

l=[1,2,3]

s=f'{l[0]}' #s=’1’

这种方法也支持真实值来源一个字典:

如: s=f”{student[‘name’]}” 

注意这里“name”用了单引号,否则会报错。

以上介绍了四种使用format字符串格式化的方法,这些方法大部分不能混合使用,目前来看索引方式(包括自动编号与手动编号)与关键字参数方式可以混用,混用时使用索引的参数放在format参数的前面,关键字参数对应的真实值赋值表达式放在后面。总体来说老猿建议大家在一个字符串甚至一个模块中,尽量使用相同的字符串格式化方法。

老猿Python系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。该系列文章同步发表于:

http://blog.sina.com.cn/learnpython   注:新浪暂停了pc的博客更新,等恢复后补齐

http://laoyuanpython.lofter.com/
https://me.csdn.net/LaoYuanPython

由于csdn对技术文章的支持度最好,推荐大家访问csdn。欢迎大家批评指正,谢谢大家关注!

第3.10节 Python强大的字符串格式化新功能:使用format字符串格式化的更多相关文章

  1. 第3.11节 Python强大的字符串格式化新功能:format字符串格式化的格式控制

                                                第3.11节 format字符串格式化的格式控制 一.    引言 上节介绍了四种format进行字符串格式化的 ...

  2. 第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问

    一. 引言 在<第14.8节 Python中使用BeautifulSoup加载HTML报文>中介绍使用BeautifulSoup的安装.导入和创建对象的过程,本节介绍导入后利用Beauti ...

  3. 第10.10节 Python使用__init__.py自动加载包下内容

    在前面章节老猿介绍了包下模块及子包的加载的各种方式,并说明包的加载首先是自动加载包下的__init__.py文件.在<第10.6节 Python包的概念>中介绍了__init__.py文件 ...

  4. 第11.17节 Python 正则表达式扩展功能:命名组功能及组的反向引用

    一. 引言 在<第11.16节 Python正则元字符"()"(小括号)与组(group)匹配模式>介绍了组匹配模式,在一个正则表达式内可以定义多个组,每个组都有一个顺 ...

  5. 将旧的时间字符串转换为新的string时间字符串

    旧的时间字符串-->simpledataformat1.parse(该字符串) 获得date类型 -->simpledataformat2.format(date) simpledatef ...

  6. 第11.10节 Python正则表达式的非贪婪模式的重复匹配:'*?', '+?',和 '??'

    在<第11.9节 Pytho正则表达式的贪婪模式和非贪婪模式>老猿简单介绍了贪婪模式和非贪婪模式,并说明'', '+',和 '?' 修饰符都是 贪婪的:它们在字符串进行尽可能多的匹配.有时 ...

  7. 第7.10节 Python类中的实例变量定义与使用

    一.    引言 在前面章节已经引入介绍了类变量和实例变量,类体中定义的变量为类变量,默认属于类本身,实例变量是实例方法中定义的self对象的变量,对于每个实例都是独有数据,而类变量是该类所有实例共享 ...

  8. 第9.10节 Python中IO模块其他文件操作属性和方法简介

    本文中所有案例中的fp都是使用open函数打开文件返回的一个文件对象,为了节省篇幅,大部分没有提供文件打开的代码. 一. 文件是否关闭的属性 属性名:closed 功用:判断文件是否关闭 示例: &g ...

  9. 第8.20节 Python中限制动态定义实例属性的白名单:__slots__

    一. 引言 按照<第7.10节 Python类中的实例变量定义与使用>.<第7.14节Python类中的实例方法解析>中的介绍,当定义了一个类,并且创建了该类的实例后,可以给该 ...

随机推荐

  1. CSP-S 2020全国开放赛前冲刺模拟训练题1 T4 二维码

    组合 首先可以考虑一个状态合法的条件,可以发现的是最后得到的矩阵一定是至少有一行或是有一列全$0$或$1$,如果把这一列或这一行删掉那么将剩下的子矩阵拼接起来又是一个子问题,同样的也是至少有一列或一行 ...

  2. 我叫Mongo,收了「查询基础篇」,值得你拥有

    这是mongo第二篇「查询基础篇」,后续会连续更新6篇 mongodb的文章总结上会有一系列的文章,顺序是先学会怎么用,在学会怎么用好,戒急戒躁,循序渐进,跟着我一起来探索交流. 通过上一篇基础篇的介 ...

  3. python爬虫02通过 Fiddler 进行手机抓包

    我们要用到一款强大免费的抓包工具 Fiddler你可以到 https://www.telerik.com/download/fiddler去下载 一般情况下 我们通过浏览器来请求服务器的时候 是点对点 ...

  4. python语言编程算法

    编程题 1 台阶问题/斐波那契 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. fib = lambda n: n if n <= 2 else fi ...

  5. HTML图片点击放大---关闭

    <html lang="en"> <head> <meta charset="UTF-8"> </head> & ...

  6. spring源码概览

    阅读spring源码需要具备的基本技能: 1,设计模式(工厂模式,单例模式,代理模式,模板模式,观察者模式,装饰器模式,适配器模式) 2,数据结构和算法(栈,队列,树以及一些基本的算法) 3,反射(如 ...

  7. JS函数命名规范

    语法规范: 任何合法的javascript标识符都可以作为函数的名称. 约定俗成的内容:(非ECMAScript语法,但是为了便于开发者理解和识别,约定的函数命名规范.) 命名方法: 小驼峰式命名法 ...

  8. binary hacks读数笔记(nm命令)

    nm命令(names):输出包含三个部分:1 符号值.默认显示十六进制,也可以指定: 2 符号类型.小写表示是本地符号,大写表示全局符号(external); 3 符号名称. 例如:nm Simple ...

  9. 从头学起Verilog(二):时序逻辑基础与回顾

    引言 时序逻辑对于数字电路设计十分重要,本文针对数字电路中的时序逻辑部分进行了系统的回顾. 存储器件 由于时序逻辑的输出不但受当前输入影响,还受之前的输入的影响,所以需要有存储单元对以前的输入进行存储 ...

  10. 安装vmware tool

    首先简单介绍一下vmware tool的作用: 1.最大的好处是可以直接把windows界面的文件拖进linux虚拟机内. 2.鼠标可以直接从虚拟机移动到windows等等好处. 步骤 1.点击虚拟机 ...