字符串str.format()方法的个人整理
引言:
字符串的内置方法大致有40来个,但是一些常用的其实就那么20几个,而且里面还有类似的用法,区分度高比如isalpha,isalnum,isdigit,还有一些无时不刻都会用到的split切分,join拼接,strip首尾去指定字符,作用无非就是围绕字符串的增删改查来进行,本人认为要弄清楚和熟练使用这些常用的方法,一方面需要在理解的基础上多多练习多多回顾,同时在工作使用中去巩固,加深记忆。忘记没关系,善于总结归纳,善于对自己大脑记忆的‘增删改查’才是重点。
str.format的意义:
作为一个初学者,最近发现字符串中最繁杂的一个方法莫过于:str.format()了,format见名思义,格式化,格式化完为了干嘛,其实就是为了得到我们需要格式的数据,也就是格式化输出,格式化输出我们一开始学习的是用%s、%d来实现,但是这种方法有很多局限性,比如%s是按照位置格式化输出,局限性显而易见,如果一次性格式化输出太多,还是根据位置来输出的话就太容易出错了。所以更精确的一种格式化输出方法就是str.format()
str.format方法介绍:
1、通过字符串中的花括号{}来识别替换字段,从而完成字符串的格式化。
2、替换的内容包括:字段名、格式说明符三部分,形式一般为:{字段名:格式说明符}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以上是简介,下面是干货:
具体实现:
1、简单实现方法:
- 省略不写{} ____写法类似%s按位置格式化输出
- 数字{十进制非负整数} ____写法类似依据位置索引传参
- 变量名{关键字} ____写法类似关键字参数传参
- 可以混合使用
1.1 省略不写:花括号内省略不写,代表传递位置参数
- 替换字段形式{}
- 注意事项:花括号个数少于等于后面的位置参数的个数,多了肯定报错。
- # 用{}代表占位符,直接位置传参
- print('我是{},喜欢{}!'.format('灭霸','打响指'))
- # 我是灭霸,喜欢打响指!
- # {}数量必须少于后面位置参数数量,不然报错
- print('我是{},喜欢{},不喜欢{}。'.format('宙斯','放大抢人头','放空大','小短腿'))
- print('我是{},喜欢{},不喜欢{}。'.format('宙斯','放大抢人头'))
- # 报错误:IndexError: tuple index out of range
- # 用{}代表占位符,直接位置传参
1.2 数字形式传参:通过位置索引值传递位置参数
- 索引从整数0开始
- 索引可以重复引用,输出
- 索引数值就是后面位置参数放入一个元组来取值的过程,所以索引数值不能大于元组里面位置参数的最大索引值,否则报错
- print('我身高{0},年龄正好{1},{2}长。'.format('180cm',18,'15cm'))
- # 我身高180cm,年龄正好18,15cm长。
- print('我身高{0},{0}不多不少,年龄正好{1}。'.format('180cm',18))
- # 我身高180cm,180cm不多不少,年龄正好18。
- print('我身高{0},年龄正好{1},{2}长。'.format('180cm',18))
- # IndexError: tuple index out of range
- print('我身高{0},年龄正好{1},{2}长。'.format('180cm',18,'15cm'))
1.3 变量名{关键字} 传递输出参数
- 想想关键字参数怎么传参,类比一下,bingo!
- 特别注意,关键字的变量名在参数那里无需加引号,同时{}里面引用直接填变量名。
- print('我的名字叫{name},我其实是一名{career}!'.format(name='尹天仇',career='演员'))
- # 我的名字叫尹天仇,我其实是一名演员!
- print('我叫{name2},又名{name1},我弟弟叫{name3}!'.format(name1='至尊宝',name2='秦汉',name3='秦祥林'))
- # 我叫秦汉,又名至尊宝,我弟弟叫秦祥林!
- print('我的名字叫{name},我其实是一名{career}!'.format(name='尹天仇',career='演员'))
1.4 {}、{0}、{name}混合使用
- 位置参数在前,关键字参数在后
- {}不能与数字形式{0}同时使用。
- print('吹个{0},吹个{2},吹大了{1},玩{ball}!'.format('球','气球','大气球',ball='球球'))
- # 吹个球,吹个大气球,吹大了气球,玩球球!
- print('吹个{},吹大了{},玩{ball}!'.format('球','气球','大气球',ball='球球'))
- # 吹个球,吹大了气球,玩球球!
- print('吹个{0},吹大了{1},玩{ball}!'.format('球','气球','大气球',ball='球球'))
- # 吹个球,吹大了气球,玩球球!
- print('吹个{0},吹大了{},玩{ball}!'.format('球','气球','大气球',ball='球球'))
- #报错 ValueError: cannot switch from manual field specification to automatic field numbering
- print('吹个{0},吹个{2},吹大了{1},玩{ball}!'.format('球','气球','大气球',ball='球球'))
2、使用元组和字典传参:
- str.format()方法可以使用*元组和**字典的形式传参,可以混用。
- 方法相当于*args和**kwargs打散传参,元组按位置或索引传参,字典按关键字传参。
- 位置参数、关键字参数、*元组、**字典也可以同时使用,但要注意位置参数在关键字参数前,*元组要在**字典前。
- # 元组
- print('我喜欢{},喜欢{},同时也喜欢{}!'.format(*('篮球','足球','观球')))
- # 我喜欢篮球,喜欢足球,同时也喜欢观球!
- print('我喜欢{0},喜欢{1},同时也喜欢{2}!'.format(*('篮球','足球','观球')))
- # 我喜欢篮球,喜欢足球,同时也喜欢观球!
- # 字典
- print('{name}的女朋友是{gf},我也喜欢{gf}!'.format(**{'name':'钢铁侠','gf':'小辣椒'}))
- # 钢铁侠的女朋友是小辣椒,我也喜欢小辣椒!
- # 元组+字典
- print('我是{beauty}的{1},我们都喜欢{0},请大家{2}!'\
- .format(*('球类','球迷','文明观球'),**{'beauty':'斯嘉丽约翰逊',}))
- # 我是斯嘉丽约翰逊的球迷,我们都喜欢球类,请大家文明观球!
- # 位置参数、关键字参数、元组、字典混合使用:
- print('我是{name},好像{age}了 ^_^,在{0},等你哦!\n喜欢{1}、{2}和{3}。\n我的唯一 >>>:{only_one}\n我的小可爱 >>>: {love}!'\
- .format('武汉',name='苏光体',age=18,*('读书','健身','折腾数码'),**{'only_one':'杨林','love':'苏弘睿'}))
- # 我是苏光体,好像18了 ^_^,在武汉,等你哦!
- # 喜欢读书、健身和折腾数码。
- # 我的唯一 >>>:杨林
- # 我的小可爱 >>>: 苏弘睿!
- # 元组
使用元组或者字典格式化输出的形式就是相当于将元组和字典打散,变成位置参数们和关键字参数们然后按照前面的方法传参就行
3、对象参数格式化输出传值:
- formate还可以使用对象属性传参,这个对象可以是实例化的对象,也可以是列表、字典
- # 对象属性传参
- # 实例化对象:
- class Dog:
- def __init__(self,name,speak):
- self.name=name
- self.speak=speak
- dog1=Dog('小黄','汪汪汪')
- print('我的{0.name}会{0.speak}。'.format(dog1))
- # 我的小黄会汪汪汪。
- # 文件对象
- with open('text.txt','wb') as f:
- print('打开的文件名为:{0.name}'.format(f))
- # 打开的文件名为:text.txt
- # 列表、字典对象
- print('I have a {0[0]} , I have a {0[1]} .'.format(['Apple','Pen']))
- print('我叫{0[name]},{0[id]}就是我!'.format({'name':'阿星','id':''}))
- print('{1[name]}变成了{0[0]},藏进了{1[role]}的裤裆里,为什么不变{0[1]}而是{0[0]}呢?'.format(['葡萄','苹果'],{'name':'菩提老祖','role':'至尊宝'}))
- # I have a Apple , I have a Pen .
- # 我叫阿星,9527就是我!
- # 菩提老祖变成了葡萄,藏进了至尊宝的裤裆里,为什么不变苹果而是葡萄呢?
- # 对象属性传参
4、格式说明符:规定传入参数字符的格式
- 比如:
- print('{0:.4f}'.format(3.1415926))
- #在传入参数后面用冒号:写入规定的格式:.4f(取4位小数) 结果为:3.1416
- print('{0:.4f}'.format(3.1415926))
- 说明符格式标准:[填充]对齐方式][正负号][#][0][宽度][分组选项][.精度][类型码] 同时存在是有顺序之分的,具体使用下面有具体示例:
- 填充:
- 填充字符只能有一个
- 不指定默认用空格填充
- 如果指定填充字符,则必须要同时指定对齐方式
- 对齐方式:
- < 左对齐
- > 右对齐
- ^ 居中对齐
- = 在正负号和数字之间填充(仅对数字类型有效)可以输出类似:+00000012的字符串。
- 正负号:
- 仅对数字类型生效
- + - 正负号
- 空格:正数前面需要添加一个空格,以便与负数对齐
- 宽度width
- 不指定宽度,宽度由内容决定
- 宽度前有0,意味着用0填充,等价于 0=的填充和对齐方式
- 精度
- 指小数点后面展示的小数位数
- 对于非数字类型,指最大字段宽度
- 整数类型不能指定精度,会报错的
- 下面看示例吧:
- #在传入参数后面用冒号:写入规定的格式:.4f(取4位小数) 结果为:3.1416
- # 填充、对齐、宽度
- print('{0:人>2}'.format('<我是谁>')) # 宽度不够,按实际字符显示
- print('{0:人<11}'.format('<我>'))
- print('{0:人^11}'.format('<我>'))
- # <我是谁>
- # <我>人人人人人人人人
- # 人人人人<我>人人人人
- # 正负号、精度
- print('{0:*=+10.4f}'.format(3.1415926)) # '*'>填充符,'='>指定在正负号和数字之间填充,'10'>宽度,'.4f'>精度
- print('{0:*>+10.4f}'.format(3.1415926)) # 同上,'>'>右对齐
- # +***3.1416
- # ***+3.1416
- print('{0:&>10.4f}'.format(3.1415926))
- print('{0:&<10.4f}'.format(3.1415926))
- print('{0:&>10.4}'.format('我是中国人')) # 精度为4,去字符串中的前4个字符
- # &&&&3.1416
- # 3.1416&&&&
- # &&&&&&我是中国
- #在传入参数后面用冒号:写入规定的格式:.4f(取4位小数) 结果为:3.1416
- 字符串类型
- 整数类型
- 浮点数类型
- # 字符串类型(默认类型,忽视)
- print('{0:s}'.format('abc')) # abc
- print('{0:}'.format('abc')) # abc
- # 整数类型
- # b 二进制|c Unicode字符|d 十进制整数|还有很多比如o八进制|x十六进制...等等
- print('{0:b}'.format(101)) #
- print('{0:c}'.format(101)) # e
- print('{0:d}'.format(666)) #
- # 浮点数字类型
- # e 科学计数(默认精度6位)
- print('{0:e}'.format(31415926)) # 3.141593e+07
- # f 定点记法(默认精度6位)
- print('{0:f}'.format(3.1415926)) # 3.141593
以上例子可以说不太全面,只是大概举了几个常见的,出了e,f类型还有g通用类型,n number类型,对于日常使用的话并不常用。所以不一一列出。
- # 字符串类型(默认类型,忽视)
类型码(规定输出的数据类型)
5、其他补充:
- 花括号本事如需格式化输出,可以用外套2层花括号转义解决
- print('{{0}}'.format('abc')) # {0}
- print('{{{0}}}'.format('abc')) # {abc}
- print('{{0}}'.format('abc')) # {0}
- 一些另类格式化输出:
- from datetime import datetime
- print('今天是:{0:%Y-%m %H:%M}'.format(datetime.now()))
- # 结果:
- 今天是:2019-05 15:10
- from datetime import datetime
总结:
str.format()格式化输出方法可以说是%s的加强型,特别是在处理更复杂的格式化输出过程时候,可以更精确的进行达到输出目的,它集成的方法可以说比较繁杂,很多方法个人认为用处不大,仅仅是锦上添花的作用,个人认为只要掌握前面几个简单的位置参数、关键字参数、元组、字典的传参形式的格式化输出就可以了。后面的方法可以有,但是不建议进行强行记忆,因为精力有限,用时再打开翻翻也就明了。。。。
个人将format()方法整理一下也是按照本人的习惯整理,方便自己以后查阅,如果有幸让大家看到,欢迎交流,一起进步!
字符串str.format()方法的个人整理的更多相关文章
- #python str.format 方法被用于字符串的格式化输出。
#python str.format 方法被用于字符串的格式化输出. #''.format() print('{0}+{1}={2}'.format(1,2,3)) #1+2=3 可见字符串中大括号内 ...
- Python字符串str的方法使用
#!usr/bin/env python# -*-coding:utf-8-*-#字符串通常用双引号或单引号来表示:'123',"abc","字符串"#str字 ...
- 【转】Python格式化字符串str.format()
原文地址:http://blog.xiayf.cn/2013/01/26/python-string-format/ 每次使用Python的格式字符串(string formatter),2.7及以上 ...
- Python 字符串格式化操作 - format方法
建议使用format()方法 字符串操作 对于 %, 官方以及给出这种格式化操作已经过时,在 Python 的未来版本中可能会消失. 在新代码中使用新的字符串格式.因此推荐大家使用format()来替 ...
- python的str.format方法
format方法被用于字符串的格式化输出. print('{0}+{1}={2}'.format(1,2,1+2)) #in 1+2=3 #out 可见字符串中大括号内的数字分别对应着format的几 ...
- 字符串格式化format方法
通过位置参数传参 print('{}, {}'.format('KeithTt', 18)) # KeithTt, 18 位置参数可以通过索引调用 print('{1}, {0}'.format('K ...
- Python字符串格式化--format()方法
https://blog.csdn.net/i_chaoren/article/details/77922939 csdn
- Java String.Format() 方法及参数说明
转自:https://blueram.iteye.com/blog/441683 JDK1.5中,String类新增了一个很有用的静态方法String.format():format(Locale l ...
- 前段 format方法
a.为字符串创建format方法,用于字符串格式化 String.prototype.format=function (arg) { //console.log(this,arg); //this,当 ...
随机推荐
- C++中的四种强制类型转换符详解
阅读目录 C++即支持C风格的类型转换,又有自己风格的类型转换.C风格的转换格式很简单,但是有不少缺点的: 转换太过随意,可以在任意类型之间转换.你可以把一个指向const对象的指针转换成指向非con ...
- Linux下VIM配置以及常用快捷键
一.VIM配置 在目录 /etc/vim下面,有个名为vimrc的文件,这是系统中公共的vim设置文件,对所有用户都有效.而在每个用户的主目录下,都能自己建立私有的设置文件,命名为:“.vimrc”. ...
- HDU 5558 后缀数组
思路: 这是一个错误的思路, 因为数据水才过= = 首先求出来后缀数组 把rank插到set里 每回差i两边离i近的rank值,更新 如果LCP相同,暴力左(右)继续更新sa的最小值 //By Sir ...
- Oracle报错:“ORA-18008: 无法找到 OUTLN 方案 ”的解决方案
Oracle报错:“ORA-18008: 无法找到 OUTLN 方案 ”的解决方案 2.修改replication_dependency_tracking参数 SQL> alter syst ...
- 转-MAC 下安装PHONEGAP开发环境
来自:http://jinzhe.net/post/8.html 什么是Phonegap呢?Phonegap是一个利用HTML5去开发App的框架.可以为安卓.iOS.WP.黑莓.火狐等移动操作系统. ...
- jsp的简介
https://www.w3cschool.cn/jsp/jsp-intro.html
- 440 K-th Smallest in Lexicographical Order 字典序的第K小数字
给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字.注意:1 ≤ k ≤ n ≤ 109.示例 :输入:n: 13 k: 2输出:10解释:字典序的排列是 [1, 10, 11, 1 ...
- Hibernate配置详解
<!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式--> <?xml version='1.0' ...
- 开源项目:JEECG
工程下载:https://github.com/zymqqc/jeecg-1
- Objective -C Memory Management 内存管理 第一部分
Objective -C Memory Management 内存管理 第一部分 Memory management is part of a more general problem in pr ...