【Python】Python字符串格式化问题:%、format()与f-strings
目 录
一、字符串格式化方法概览
二、format() 常用格式化
1、通过位置
2、通过关键字参数
3、通过对象属性
4、通过下标
5、格式限定符
1)字符的填充与对齐
2)数字精度与类型f处理
3)进制转换
4)千位分隔符
6、列表字典拆分
三、format() 底层语法
一、字符串格式化方法概览
方法 1 -------- 过去的格式化方法,代码中还能经常见到
在 python 2.6 之前,利用 百分号 % 表示占位符,进行格式化
name='小伍哥'
'Hello,%s'%name
Hello,小伍哥
方法 2 -------- 现阶段使用最多的方法
Python2.6 引入,它通过 {} 和 : 来代替%表示占位符,性能比 % 更强大,字符串的 format 方法
name='小伍哥'
'Hello,{}'.format(name)
'Hello,小伍哥'
方法 3 -------- 推荐使用的方法
为了进一步简化格式化方法,Eric Smith 在2015年提交了 PEP 498 -- Literal String Interpolation 提案。Python 3.6 引入了新的字符串格式化方式 f-strings,字符串开头加上一个字母 f ,与其它格式化方式相比,不仅简洁明了,可读性更好,更不容易出错,而且运行效率也更高
name='小伍哥'
f'Hello,{name}'
'Hello,小伍哥'
Python中常见的格式化的方法主要有三种,本文讲解目前最常用的format格式化方式,后期讲进行对比讲解。
二、format() 常用格式化
1、通过位置
'{0},{1}'.format('小伍哥',18)
'小伍哥,18''{},{}'.format('小伍哥',18)
'小伍哥,18''{1},{0},{1}'.format('小伍哥',18)
'18,小伍哥,18''{0}{1}{2}{3}{4}'.format('上','海','自','来','水')
'上海自来水''{0}{1}{2}{3}{4}{3}{2}{1}{0}'.format('上','海','自','来','水')
'上海自来水来自海上'
字符串的format函数可以接受不限个参数,位置可以不按顺序,可以不用或者用多次,不过2.6不能为空{},2.7才可以。foramt会把参数按位置顺序来填充到字符串中,第一个参数是0,然后1……
也可以不输入数字,这样也会按顺序来填充同一个参数可以填充多次,这个是format比%先进的地方
2、通过关键字参数
'{name},{age}'.format(age=18,name='小伍哥')
'小伍哥,18'
3、通过对象属性
class Person:def __init__(self,name,age):self.name,self.age = name,agedef __str__(self):return 'This guy is {self.name},is {self.age} old'.format(self=self)print(Person('小伍哥',18))
This guy is 小伍哥,is 18 oldc = 3-5j
print(('The complex number {0} is formed from the real part {0.real} and the imaginary part {0.imag}.').format(c))
The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0
4、通过下标
p=['小伍哥',18]
'{0[0]},{0[1]}'.format(p)
'小伍哥,18'coord = (3, 5)
print('X: {0[0]}; Y: {0[1]}'.format(coord))
X: 3; Y: 5
有了这些便捷的“映射”方式,我们就有了偷懒利器。基本的python知识告诉我们,list和tuple可以通过“打散”成普通参数给函数,而dict可以打散成关键字参数给函数(通过和*)。所以可以轻松的传个list/tuple/dict给format函数。非常灵活。
5、格式限定符
它有着丰富的的“格式限定符”(语法是{} 中带: 号)
1)字符的填充与对齐
填充常跟对齐一起使用
^ < >分别是居中、左对齐、右对齐,后面带宽度
: 号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
'{:>8}'.format('18')
' 18'
'{:0>8}'.format('18')
'00000018'
'{:*>8}'.format('18')
'******18'
注:字符串模块内置函数中也存在对齐的函数 str.center(),str.ljust(),str.rjust(),str.zfill()
'shuai'.center(10,'*')#居中对齐
'**shuai***''shuai'.ljust(10,'*')#左对齐
'shuai*****''18'.zfill(10)#右对齐
'0000000018'
2)数字精度与类型f处理
精度常跟类型f一起使用
'{:.2f}'.format(321.33345)
'321.33''π is {:.2f}'.format(3.1415926)
π is 3.14'π is %.2f'% 3.1415926
π is 3.14'{0:.4f}+{1:.4f}'.format(321.33345,325.33345)
'321.3335+325.3335'"{:.2%}".format(0.00234)
'0.23%'
其中.2表示长度为2的精度,f表示float类型。
数字 |
格式 |
输出 |
描述 |
3.1415926 |
{:.2f} |
3.14 |
保留小数点后两位 |
3.1415926 |
{:+.2f} |
+3.14 |
带符号保留小数点后两位 |
-1 |
{:+.2f} |
-1.00 |
带符号保留小数点后两位 |
2.71828 |
{:.0f} |
3 |
不带小数 |
5 |
{:0>2d} |
05 |
数字补零 (填充左边, 宽度为2) |
5 |
{:x<4d} |
5xxx |
数字补x (填充右边, 宽度为4) |
10 |
{:x<4d} |
10xx |
数字补x (填充右边, 宽度为4) |
1000000 |
{:,} |
1,000,000 |
以逗号分隔的数字格式 |
0.25 |
{:.2%} |
25.00% |
百分比格式 |
1000000000 |
{:.2e} |
1.00e+09 |
指数记法 |
13 |
{:>10d} |
13 |
右对齐 (默认, 宽度为10) |
13 |
{:<10d} |
13 |
左对齐 (宽度为10) |
13 |
{:^10d} |
13 |
中间对齐 (宽度为10) |
3)进制转换
主要就是进制了,b、d、o、x分别是二进制、十进制、八进制、十六进制。
'{:b}'.format(17)
'10001'
'{:d}'.format(17)
'17'
'{:o}'.format(17)
'21'
'{:x}'.format(17)
'11'
b: 输出整数的二进制方式
c: 输出整数对应的 Unicode 字符;
d: 输出整数的十进制方式;
o: 输出整数的八进制方式;
x: 输出整数的小写十六进制方式;
X: 输出整数的大写十六进制方式;
数字 |
格式 |
输出 |
描述 |
11 |
'{:b}'.format(11) |
1011 |
进制转换 |
11 |
'{:d}'.format(11) |
11 |
进制转换 |
11 |
'{:o}'.format(11) |
13 |
进制转换 |
11 |
'{:x}'.format(11) |
b |
进制转换 |
11 |
'{:#x}'.format(11) |
0xb |
进制转换 |
11 |
'{:#X}'.format(11) |
0XB |
进制转换 |
4)千位分隔符
用,号还能用来做金额的千位分隔符。
'{:,}'.format(1234567890)
'1,234,567,890'
6、列表字典拆分
在format格式化时,可使用* 或者 ** 进行对list、tuple拆分。
foods = ['fish', 'beef', 'fruit']
s = 'i like eat {} and {} and {}'.format(*foods)
# i like eat fish and beef and fruit
print(s)foods = ['fish', 'beef', 'fruit']
s = 'i like eat {2} and {0} and {1}'.format(*foods)
# i like eat fruit and fish and beef
print(s)
dict_temp = {'name': 'Lily', 'age': 18}
字典需要用 ** 进行拆分
s = 'My name is {name}, i am {age} years old'.format(**dict_temp)
print(s) # My name kwargs = {'name': 'egon', 'age': 18}
print('我的名字是 {name}, 我的年龄是 {age}.'.format(**kwargs)) # 使用**进行解包
三、format() 底层语法
上面讲解了常见的用户,该函数的通用的底层其实非常复杂和通用的,有非常多的参数,且都是可选参数,导致学习起来非常困难,有兴趣的可以仔细研究,format() 方法的语法格式如下:
str.format(args)
str : 用于指定字符串的显示样式
args: 用于指定要进行格式转换的项,如果有多项,之间有逗号进行分割
学习 format() 方法的难点,在于搞清楚 str 显示样式的书写格式。在创建显示样式模板时,需要使用 {} 和 : 来指定占位符,其完整的语法格式为:
{ [index][ : [ [fill] align] [sign] [#] [width] [.precision] [type] ] }
格式中用 [] 括起来的参数都是可选参数,即可以使用,也可以不使用。
各个参数的含义如下:
index:指定:后边设置的格式要作用到 args 中第几个数据,数据的索引值从 0 开始。如果省略此选项,则会根据 args 中数据的先后顺序自动分配。
fill:指定空白处填充的字符。注意,当填充字符为逗号(,)且作用于整数或浮点数时,该整数(或浮点数)会以逗号分隔的形式输出,例如(1000000会输出 1,000,000)。
align:指定数据的对齐方式,具体的对齐方式如表 1 所示。
align |
含义 |
< |
数据左对齐。 |
> |
数据右对齐。 |
= |
数据右对齐,同时将符号放置在填充内容的最左侧,该选项只对数字类型有效。 |
^ |
数据居中,此选项需和 width 参数一起使用。 |
sign:指定有无符号数,此参数的值以及对应的含义如下表所示。
sign参数 |
含义 |
+ |
正数前加正号,负数前加负号。 |
- |
正数前不加正号,负数前加负号。 |
空格 |
正数前加空格,负数前加负号。 |
# |
对于二进制数、八进制数和十六进制数,使用此参数,各进制数前会分别显示 0b、0o、0x前缀;反之则不显示前缀。 |
width:指定输出数据时所占的宽度。
precision:指定保留的小数位数。
type:指定输出数据的具体类型,如下表所示。
type类型值 |
含义 |
s |
对字符串类型格式化。 |
d |
十进制整数。 |
c |
将十进制整数自动转换成对应的 Unicode 字符。 |
e 或者 E |
转换成科学计数法后,再格式化输出。 |
g 或 G |
自动在 e 和 f(或 E 和 F)中切换。 |
b |
将十进制数自动转换成二进制表示,再格式化输出。 |
o |
将十进制数自动转换成八进制表示,再格式化输出。 |
x 或者 X |
将十进制数自动转换成十六进制表示,再格式化输出。 |
f 或者 F |
转换为浮点数(默认小数点后保留 6 位),再格式化输出。 |
% |
显示百分比(默认显示小数点后 6 位)。 |
每个参数的取值范围
str ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill ::= <any character>
align ::= "<" | ">" | "=" | "^"
sign ::= "+" | "-" | " "
width ::= 正整数
grouping_option ::= "_" | ","
precision ::= 正整数
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" |"x" | "X" | "%"
··· END ···往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑温州大学《机器学习课程》视频
本站qq群851320808,加入微信群请扫码:
【Python】Python字符串格式化问题:%、format()与f-strings相关推荐
- python中字符串格式化%与.format
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- Python之字符串格式化(format)
2019独角兽企业重金招聘Python工程师标准>>> # 普通调用 "{0}, {1} and {2}".format('spam', 'ham', 'eggs ...
- python format函数实例_Python字符串格式化,format格式化函数详细使用
Python接触比较多的是字符串,那么操作字符串也就多.Python 支持格式化字符串的输出 . 尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符的字符串中. 代码 ...
- python字符串format方法参数解释,一文秒懂!Python字符串格式化之format方法详解
一文秒懂!Python字符串格式化之format方法详解 一文秒懂!Python字符串格式化之format方法详解 format是字符串内嵌的一个方法,用于格式化字符串.以大括号{}来标明被替换的字符 ...
- Python中字符串前“b”,“r”,“u”,“f”的作用
原文:https://www.jb51.net/article/176601.htm 原文有bug特参考:https://www.cnblogs.com/songzhenhua/p/13236794. ...
- python常用字符串格式化_Python字符串格式化常用手段及注意事项
Python字符串格式化常用手段及注意事项 格式化方式1: 使用f"" 使用示例 # -*- coding: utf-8 -*- # @Time : 2020/4/22 22:35 ...
- Python Base 字符串格式化输出
Python的字符串格式化输出 概述 summary = '''Python用一个tuple(其实可以不写tuple括号也可以)将多个值传递给模板,每个值对应一个格式符. ''' example = ...
- Python f-string字符串格式化的介绍
从 Python 3.6 开始,f-strings 是一种很好的格式化字符串的新方法.它们不仅比其他格式化方式更易读.更简洁.更不容易出错,而且速度也更快! 在本文结束时,您将了解如何以及为什么从今天 ...
- python字符串前面加f什么意思_详解Python中字符串前“b”,“r”,“u”,“f”的作用...
1.字符串前加 u 例:u"我是含有中文字符组成的字符串." 作用: 后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时 ...
- Java字符串格式化—String.format()的使用以及Printf的使用
Java字符串格式化-String.format()的使用以及Printf的使用 tring类的format()方法用于创建格式化的字符串以及连接多个字符串对象.记得C语言的printf()方法,两者 ...
最新文章
- Windows7是什么
- 中小企业如何规避因员工跳槽而产生的风险?
- 小智机器人江苏赞_智能机器人小智
- magento邮件使用php,Magento订单成功无邮件发送
- 2018年全国中高等院校教师“Python编程、应用及华为大数据” 、“网络空间安全”、“区块链”培训班...
- 错过了多次捞钱的机会
- 随机发生器:线性同余法
- AD软件解决 Unknown Pin 和Failed to add class member 问题
- 教师不能错过的三款教学必备工具
- 【完结】JQ-从0到1-总结
- 红帽子linux5.5安装,红帽子企业Linux 5安装 硬盘安装
- 必火CTF闯关(1)
- 美国电子烟走向规范化,“下一站”是中国?
- 各行业工资单出炉 IT类连续多年霸占“榜首”位置
- 最近在B站重新看学习视频小结
- 2022 Gartner RPA魔力象限发布,两家国产厂商入选,超自自动化成重点
- exit()和_exit()
- C语言fgets()函数
- 【Logback】<appender>标签详解
- 基于cocos2dx引擎开发的大富翁游戏