百木园-与人分享,
就是让自己快乐。

超详细的格式化输出(format的基本玩法)

一、format的基本玩法

🚀🚀一、什么是format

format是字符串内嵌(字符串内嵌:字符串中再嵌套字符串,加入双引号或单引号)的一个方法,用于格式化字符串。以大括号{}来标明被替换的字符串

🚀🚀format玩法一:按顺序输出(按照{}的顺序依次匹配括号中的值)

>>>s = \'年龄 {} ,爱好{},性别 {}\'.format(18,\'发呆\',\'男\')
>>>print(s)
年龄18,爱好发呆,性别男

🚀🚀format玩法二:按索引输出

当数据多个重复的时候按索引来:例如以下代码爱好和喜欢相同(都是发呆)且发呆对应索引是1,所以大括号里可以用1来指向要被替换数据(发呆)在format()中的索引

>>>s = \'年龄 {0} ,爱好{1},性别 {2},喜欢{1}\'.format(18,\'发呆\',\'男\')
>>>print(s)
年龄18,爱好发呆,性别男,喜欢发呆

🚀🚀format玩法三:通过参数名来匹配参数(也叫做使用关键字传递参数)

```
>>>hobby = input(\'请输入你的爱好:\')
>>>s = \'年龄{age},爱好{hobby},性别{sex}\'.format(hobby = hobby,sex = 男,age = 18)
>>>print(s)
请输入你的爱好:发呆
年龄18,爱好发呆,性别男
```
##🚀🚀format玩法四:通过默认,参数名来混搭进行使用
代码一:

hobby = input(\'请输入你的爱好:\')
s = \'爱好{hobby},性别{}\'.format(\'男\',hobby = hobby)
print(s)、
输出结果
爱好发呆,性别男

🚀🚀format玩法需要注意的常见错误(切记,切记)

✨错误一✨
代码一如果写成以下代码就会报错:仔细观察代码二与代码一的区别

代码二:

hobby = input(\'请输入你的爱好:\')
s = \'爱好{hobby},性别{}\'.format(hobby = hobby,\'男\')
print(s)
报错如下:
s = \'爱好{hobby},性别{}\'.format(hobby = hobby,\'男\')
                                                      ^
SyntaxError: positional argument follows keyword argument

为什么我们将.format(hobby = hobby , \'男\')更改为.format(\'男\' , hobby = hobby)
就会报错呢??

❣️那是因为命名的参数(变量)必须写到最后。否则会编译报错❣️hobby是我们命名的一个参数所以必须放在最后。

✨错误二✨
❣️❣️不可以索引和默认格式化混合使用:

所以以下代码均会报错:

>>>s = \'爱好{},性别{1}\'.format(\'发呆\',\'男\')
>>>print(s)
报以下错误:
ValueError: cannot switch from automatic field numbering to manual field specification
>>>s = \'爱好{},性别{0}\'.format(\'男\',\'发呆\')
>>>print(s)
报以下错:
ValueError: cannot switch from automatic field numbering to manual field specification

二、format的进阶玩法

🎉🎉玩法五、通过对象的属性(详细见代码注释)

首先我们定义一个函数Names()在函数内定义一个局部变量a

>>>def Names():
>>>    a = \'周周\'
#然后将 a 调用出来做为关键字传参
>>>s = \'我叫{names.a}\'.format(names = Names)
我叫周周

🎉🎉玩法六、支持对参数部分引用

可以通过索引对参数的部分进行取值。如:s = \'1男生1\'我们只需要\'男\'这一部分我们就可以采用切片s[1]将其切出,再传递到对应部分。

>>>char = \'性别{s[1]}\'.format(s = \'1男生1\')
>>>print(char)
性别男

🎉🎉玩法七、使用format 使结果保留两位小数

一般需要使用 (:. 2f),在用%进行格式化时我们使用的是(%.2f )🔥操作方法如下:

>>>s1 = \'π是{:.2f}\'.format(3.1415926)
>>>print(s1)
>>>s2 = \'π是%.2f\'% 3.1415926
>>>print(s2)
π是3.14
π是3.14
同时这种方法还可以用于字符串截取,不过数字后面就不能加f了🔥操作方法如下🔥

#{:1}指截取索引为[0:1]的字符(顾头不顾尾)
s = \'性别{:.1}\'.format(\'男生122\')
#{:2}指截取索引为[0:2]的字符(顾头不顾尾)
m = \'性别{:.2}\'.format(\'男生122\')
print(s)
print(m)
性别男
性别男生

🎉🎉玩法八、 format中格式的处理

在占位符中还可以有格式化控制符,对字符串的格式进行更加精准 的控制。格式化控制符位于占位符索引或占位符名字的后面,之间用冒号分隔,语法:{参数序号:格式控制符}或{参数名:格式控制符}。字符串的格式化控制符及其说明如下表所示:
image

🔥操作方法如下表:🔥

image

>>> format(3.1415936)
\'3.1415936\'
>>> str(3.1415926)
\'3.1415926\'
#字符串可以提供的参数,指定对齐方式,<是左对齐, >是右对齐,^是居中对齐
>>>print(format(\'test\', \'<20\'))
>>>print(format(\'test\', \'>20\'))
>>>print(format(\'test\', \'^20\'))
test
                test
        test

#整形数值可以提供的参数有 \'b\' \'c\' \'d\' \'o\' \'x\' \'X\' \'n\' None
>>> format(3,\'b\') #转换成二进制
\'11\'
>>> format(97,\'c\') #转换unicode成字符
\'a\'
>>> format(11,\'d\') #转换成10进制
\'11\'
>>> format(11,\'o\') #转换成8进制
\'13\'
>>> format(11,\'x\') #转换成16进制 小写字母表示
\'b\'
>>> format(11,\'X\') #转换成16进制 大写字母表示
\'B\'
>>> format(11,\'n\') #和d一样
\'11\'
>>> format(11) #默认和d一样
\'11\'

#浮点数可以提供的参数有 \'e\' \'E\' \'f\' \'F\' \'g\' \'G\' \'n\' \'%\' None
>>> format(314159267,\'e\') #科学计数法,默认保留6位小数
\'3.141593e+08\'
>>> format(314159267,\'0.2e\') #科学计数法,指定保留2位小数
\'3.14e+08\'
>>> format(314159267,\'0.2E\') #科学计数法,指定保留2位小数,采用大写E表示
\'3.14E+08\'
>>> format(314159267,\'f\') #小数点计数法,默认保留6位小数
\'314159267.000000\'
>>> format(3.14159267000,\'f\') #小数点计数法,默认保留6位小数
\'3.141593\'
>>> format(3.14159267000,\'0.8f\') #小数点计数法,指定保留8位小数
\'3.14159267\'
>>> format(3.14159267000,\'0.10f\') #小数点计数法,指定保留10位小数
\'3.1415926700\'
>>> format(3.14e+1000000,\'F\')  #小数点计数法,无穷大转换成大小字母
\'INF\'

#g的格式化比较特殊,假设p为格式中指定的保留小数位数,先尝试采用科学计数法格式化,得到幂指数exp,如果-4<=exp<p,则采用小数计数法,并保留p-1-exp位小数,否则按小数计数法计数,并按p-1保留小数位数
>>> format(0.00003141566,\'.1g\') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留0位小数点
\'3e-05\'
>>> format(0.00003141566,\'.2g\') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留1位小数点
\'3.1e-05\'
>>> format(0.00003141566,\'.3g\') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留2位小数点
\'3.14e-05\'
>>> format(0.00003141566,\'.3G\') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留0位小数点,E使用大写
\'3.14E-05\'
>>> format(3.1415926777,\'.1g\') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留0位小数点
\'3\'
>>> format(3.1415926777,\'.2g\') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留1位小数点
\'3.1\'
>>> format(3.1415926777,\'.3g\') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留2位小数点
\'3.14\'
>>> format(0.00003141566,\'.1n\') #和g相同
\'3e-05\'
>>> format(0.00003141566,\'.3n\') #和g相同
\'3.14e-05\'
>>> format(0.00003141566) #和g相同
\'3.141566e-05\'

🎉🎉 玩法九、字符填充

可通过(: 符号^数字)进行字符串的填充。 其中数字为填充后的字符串总长度操作如下:

s = \"{:*^10}\".format(\'12345\')
print(s) 
**12345***

s = \"{:-^20}\".format(\'123456\')
print(s)
-------123456-------

但是如果数字{要求的长度}小于字符串的长度,则不进行填充操作。

#这里要求字符串的长度是3,但是已经是5了,所以不会填充
s = \"{:*^3}\".format(\'12345\')
print(s)
12345

🎉🎉 玩法十:对列表(list)、字典(dic)的拆分

在format格式化时,可使用* 或者 ** 进行对list、dic拆分。

foods = [\'鱼\', \'虾\', \'肉\']
s = \'我爱吃{}和{}和{}\'.format(*foods)
print(s)
我爱吃鱼和虾和肉

foods = [\'鱼\', \'虾\', \'肉\']
s = \'我爱吃{2}和{0}和{1}\'.format(*foods)
print(s)
我爱吃鱼和虾和肉

dict_temp = {\'爱好\':\'发呆\',\'姓名\':\'周周\'}
# 字典需要用 ** 进行拆分
s = \'我叫{姓名},爱好{爱好}\'.format(**dict_temp)
print(s)
我叫周周,爱好发呆
结语:

来源:https://www.cnblogs.com/zaixiazhouzhou/p/16673788.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 超详细的格式化输出(format的基本玩法)

相关推荐

  • 暂无文章