%仍是format
皇城PK
Python中格式化字符串目前有两种阵营:%和format,咱们应该选择哪一种呢?
自从Python2.6引入了format这个格式化字符串的方法以后,我认为%仍是format这根本就不算个问题。不信你往下看。
#
定义一个坐标值
c = (250, 250
)
#
使用%来格式化
s1 =
"
敌人坐标:%s
"
% c
上面的代码很明显会抛出一个以下的TypeError:
TypeError: not all arguments converted during string formatting
像这类格式化的需求咱们须要写成下面丑陋的格式才行:
#
定义一个坐标值
c = (250, 250
)
#
使用%丑陋的格式化...
s1 =
"
敌人坐标:%s
"
% (c,)
而使用format就不会存在上面的问题:
#
定义一个坐标值
c = (250, 250
)
#
使用format格式化
s2 =
"
敌人坐标:{}
"
.format(c)
很显然,上面这一个理由就已经足够让你在之后的项目中使用format了。
新特性
In[1]: name =
"
Q1mi
"
In[2
]: age =
18
In[3
]: f
"
My name is {name}.I'm {age}
"
Out[3
]:
"
My name is Q1mi.I'm 18
"
经常使用的format用法
经过位置
In[1]: data = [
"
Q1mi
"
,
18
]
In[2
]:
"
Name:{0}, Age:{1}
"
.format(*
data)
Out[2
]:
'
Name:Q1mi, Age:18
'
经过关键字
In[
1
]: data = {
"
name
"
:
"
Q1mi
"
,
"
age
"
:
18
}
In[
2
]:
"
Name:{name}, Age:{age}
"
.format(**
data)
Out[
2
]:
'
Name:Q1mi, Age:18
'
经过对象属性
In[
1
]: class Person(
object
):
...: def __init__(self, name, age):
...: self.name
=
name
...: self.age
=
age
...: def __str__(self):
...: return
"
This guy is {self.name}, {self.age} years old.
"
.format(self=
self)
...:
In[2
]: p = Person(
"
Q1mi
"
,
18
)
In[3
]: str(p)
Out[3
]:
'
This guy is Q1mi, 18 years old.
'
经过下标
In[
1
]:
"
{0[0]} is {0[1]} years old.
"
.format(data)
Out[
1
]:
'
Q1mi is 18 years old.
'
填充与对齐
填充常跟对齐一块儿使用
^、<、>分别是居中、左对齐、右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充。
In[
1
]:
"
{:>10}
"
.format(
'
18
'
)
Out[
1
]:
'
18
'
In[
2
]:
"
{:0>10}
"
.format(
'
18
'
)
Out[
2
]:
'
0000000018
'
In[
3
]:
"
{:A>10}
"
.format(
'
18
'
)
Out[
3
]:
'
AAAAAAAA18
补充一个字符串自带的zfill()方法:
Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0。
zfill()方法语法:str.zfill(width)
参数width指定字符串的长度。原字符串右对齐,前面填充0。
返回指定长度的字符串。
In[
1
]:
"
18
"
.zfill(
10
)
Out[
1
]:
'
0000000018
'
精度与类型f
精度常跟类型f一块儿使用。
In[
1
]:
"
{:.2f}
"
.format(
3.1415926
)
Out[
1
]:
'
3.14
'
其中.2表示长度为2的精度,f表示float类型。
其余进制
主要就是进制了,b、d、o、x分别是二进制、十进制、八进制、十六进制。
In[
1
]:
"
{:b}
"
.format(
18
)
Out[
1
]:
'
10010
'
In[
2
]:
"
{:d}
"
.format(
18
)
Out[
2
]:
'
18
'
In[
3
]:
"
{:o}
"
.format(
18
)
Out[
3
]:
'
22
'
In[
4
]:
"
{:x}
"
.format(
18
)
Out[
4
]:
'
12
'
千位分隔符
In[
1
]:
"
{:,}
"
.format(
1234567890
)
Out[
1
]:
'
1,234,567,890
'