字符串格式化:format函数
相比较.format和占位符%来说,我个人是比较喜欢.format的,因为它对于结构和排版来说都非常的整洁。
.format在许多方面看起来更便利.对于%最烦人的是它无法同时传递一个变量和元组.你可能会想下面的代码不会有什么问题:
name =
'zhangsan'
;
print(
'my name is
%s
'%name)
你会得出如下结论:
如果name中不是一个字符串,而是一个元组类型的数据比如
name = (1 ,2 ,3)
此时你的代码必须在name后面加上逗号,
name = (1 ,2 ,3)
print("my name is%s"%(name , ))
此时你会得到正常的输出:
否则则会出现如下错误:
![](https://img-blog.csdn.net/20180207212920567?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWlhbnRpYW4xODA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
或者你可以使用.format
name = (1 ,2 ,3)
print("hi there{0}".format(name))
![](https://img-blog.csdn.net/20180208104344838?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWlhbnRpYW4xODA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
相比较占符来说,.format比较方便简洁。而且非常的灵活,在接下来的篇幅中,我会为大家一一介绍;
sb
=
'sss'
dsb
=
555
print
(
'
{0}
,
{1}
'
.format(sb , dsb))
print
(
'
{0}
,
{1}
,
{0}
'
.format(sb , dsb))
如上所示,format可以与{}之间建立映射关系。也就是说完全可以通过控制下标来进行对变量的管理,简洁,灵活;不需要多次让相同的变量出现;
sb
=
[
'zhangsan'
,
'lisi'
,
666
]
dsb
=
[
'wangwu'
,
'dingliu'
,
999
]
print
(
'
{0[0]}
,
{0[2]}
,
{1[0]}
,
{1[1]}
'
.format(sb , dsb))
看过之前的例子,{x[y]}其中的x代表的便是format函数中所对应变量的下标,而y则是相对应的数组中的数据的下标;
sb
=
{
'zhangsan'
:
666
,
'lisi'
:
777
}
dsb
=
{
'wangwu'
:
888
,
'dingliu'
:
999
}
print
(
'
{0[zhangsan]}
,
{1[wangwu]}
'
.format(sb , dsb))
![](https://img-blog.csdn.net/20180208105525344?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWlhbnRpYW4xODA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
对于dict来说,跟数组的相差并不太,只是由下标查询改为了关键字;
class
Person
:
def
__init__
(
self
,
name
,
score
):
self
.name
=
name
;
self
.score
=
score
;
def
__str__
(
self
):
#重写输出
return
'my name is
{self.name}
and my score is
{self.score}
'
.format(
self
=
self
)
s
=
str
(Person(
'zhangsan'
,
59
))
print
(s)
![](https://img-blog.csdn.net/20180208105746661?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWlhbnRpYW4xODA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
其中__str__重写了输出函数print,将输出的格式改为我们想要的;重点是format函数还可以通过对象属性输出
format函数还有很多格式限定符,而作为小白的我在刚接触format时并不知情,当时format的灵活性倒是给了我很大的印象;现在我为大家一一列出:
个是限定符的语法是{}中必须带着:的
如上文所说,format函数给人很工整的感觉,他有着excel中类似的填充和对齐:
^ , < , >分别对应居中,左对齐,右对齐;
a
=
555
print
(
'
{:>5}
'
.format(a))
如上所示,其中{:x>y}其中的x代表你所要填充的字符,只能一个字符,默认为空格。而y相当于你有多少个格子,比如我定义5个格子,而555只用了3个,那么剩余的两个就由空格填充
a
=
555
print
(
'
{:g>5}
'
.format(a))
![](https://img-blog.csdn.net/20180208110704691?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWlhbnRpYW4xODA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
在运用于金钱展示时,format函数还可以坐千位分隔符:
a
=
55555555
print
(
'
{:,}
'
.format(a))
![](https://img-blog.csdn.net/20180208110843599?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWlhbnRpYW4xODA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
当然format还有一些基本的进制转换
a
=
10
print
(
'我是二进制
{:b}
'
.format(a))
print
(
'我是十进制
{:d}
'
.format(a))
print
(
'我是八进制
{:o}
'
.format(a))
print
(
'我是十六进制
{:x}
'
.format(a))
精度方面,
a
=
10.111
print
(
'
{:.1f}
'
.format(a))
![](https://img-blog.csdn.net/20180208111117530?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWlhbnRpYW4xODA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
其中.代表小数点后,1表示长度为1的精度,f则代表浮点数,而浮点数与与精度通常一起使用