方法一 % 格式符
基本形式:%[(name)][flags][width].[precision]typecode
(name) 可选,用于选择指定的key(与字典形式结合,选择指定的key,友情提醒,字典没有顺序的说法噢)
flags 可选,可供选择的值有: + - 空格 0
width 可选,占有宽度
.precision 可选,小数点后保留的位数(小詹友情提醒,整型d可是没有小数的说法噢)
typecode 必选!
以下结合实例说明每个参数的概念和使用:
1. (name) 可选,用于选择指定的key,输出字典中指定的key对应的值,字典中没有顺序,只有键值对对应即可:
a = "%(name)s is a %(sex)s of %(age)d years old."%{'age':22,'sex':'boy','name':'xiaozhan'}
print(a)
#运行的结果是(为便于查看,就放到代码一起了):
>>>xiaozhan is a boy of 22 years old.
2. flags 可选,可供选择的值有:(通常与width结合)
+ 右对齐;正数前加正号,负数前加负号;
- 左对齐;正数前无符号,负数前加负号;
空格 右对齐;正数前加空格,负数前加负号;
0 右对齐;正数前无符号,负数前加负号;用0填充空白处
3. width 可选,占有宽度
这里结合2.3,以对比右对齐和左对齐为例;如下的age部分:
a = "%(name)s is a %(sex)s of %(age)+5d years old."%{'age':22,'sex':'boy','name':'xiaozhan'}
print(a)
a = "%(name)s is a %(sex)s of %(age)-5d years old."%{'age':22,'sex':'boy','name':'xiaozhan'}
print(a)
#运行的结果是(为便于查看,就放到代码一起了):
>>>xiaozhan is a boy of +22 years old.
>>>xiaozhan is a boy of 22 years old.
4. .precision 可选,小数点后保留的位数(小詹再次提醒,不要忘了整型无小数噢)
这里比较好懂,还是那句话为例,只不过得把key:age改成float类型!
#认真比较区别!
a = "%(name)s is a %(sex)s of %(age)+10f years old."%{'age':22,'sex':'boy','name':'xiaozhan'}
print(a)
a = "%(name)s is a %(sex)s of %(age)+.10f years old."%{'age':22,'sex':'boy','name':'xiaozhan'}
print(a)
#运行的结果是(为便于查看,就放到代码一起了):
>>>xiaozhan is a boy of +22.000000 years old.
>>>xiaozhan is a boy of +22.0000000000 years old.
细心的朋友会发现上述两句仅有一点之差噢!没错,第一个是没有‘.’,那么10代表的是【width】,为占位宽度;第二个有‘.’,代表【.precision】,为小数点个数
5. typecode 必选(哎哟喂!唯一一个必选!)表示获取对应类型的值并格式化到指定位置
s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置
r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置
c,整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置
o,将整数转换成 八 进制表示,并将其格式化到指定位置
x,将整数转换成十六进制表示,并将其格式化到指定位置
d,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置
e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
F,同上
g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
%,当字符串中存在格式化标志时,需要用 %%表示一个百分号
这里用的最多应当是字符型‘s',整型'd',浮点数'f'~对应前边的age即可了解,不做重复举例啦~
这里来一个综合示例:(借用闹笑话那次的啦~)
#综合案例
name = input('name:')
sex = input('sex:')
age = int(input('age:'))
salary = int(input('salary:'))
info = '''\
------info of me-------
name:% 10s
sex:% 10s
age:% 10d
salary:% 10d
'''% (name,sex,age,salary)
print(info)
#运行过程放在这一起方便查看:
name:xiaozhan
sex:boy
age:22
salary:1000000
------info of me-------
name: xiaozhan
sex: boy
age: 22
salary: 1000000
方法二 format方式
基本形式: [[fill]align][sign][#][width][,][.precision][type]
fill 【可选】空白处填充的字符
align 【可选】对齐方式(需配合width使用)
sign 【可选】有无符号数字【同方法一的flags,仅+-0三种取值】
# 【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
, 【可选】为数字添加分隔符,如:1,000,000
width 【可选】格式化位所占宽度
.precision 【可选】小数位保留精度
type 【可选】格式化类型,类似方法一,不重复叙述
这里是用格式化字符串的函数 str.format(),它增强了字符串格式化的功能。基本语法是通过 {} 和 : 来代替以前的 % 。format 函数可以接受不限个参数,位置可以不按顺序。和第一种方法一样,以下结合实例说明每个参数的概念和使用:
1. fill 【可选】空白处填充的字符 这里比第一种方式拓展性好,可以指定填充的字符
2. align 【可选】对齐方式(需配合width使用)
<,内容左对齐
>,内容右对齐(默认)
^,内容居中
^,内容居中=,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
3. width 【可选】格式化位所占宽度
以上三个参数结合起来使用较为频繁,例如下面是不同姿势的'我爱小詹'
a = '---{:*<18s}--- span="" class="hljs-string" style="font-size: inherit; line-height: inherit; color: rgb(209, 241, 169); word-wrap: inherit !important; word-break: inherit !important;" a=".format('我爱小詹')
print(a)
#便于展示,结果放代码一起
>>>---我爱小詹**************---
>>>---*******我爱小詹*******---
>>>---**************我爱小詹---
4. # 【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
b,将10进制整数自动转换成2进制表示然后格式化
c,将10进制整数自动转换为其对应的unicode字符
d,十进制整数
o,将10进制整数自动转换成8进制表示然后格式化;
x,将10进制整数自动转换成16进制表示然后格式化(小写x)
X,将10进制整数自动转换成16进制表示然后格式化(大写X)
下面以小詹的age举例,以二进制的15为例(才不告诉你小詹才15岁呢):
a = 'xiaozhan is {:d} years old'.format(15)
print(a)
a = 'xiaozhan is {:b} years old'.format(15)
print(a)
a = 'xiaozhan is {:#b} years old'.format(15)
print(a)
#便于展示,结果放代码一起
>>>xiaozhan is 15 years old
>>>xiaozhan is 1111 years old
>>>xiaozhan is 0b1111 years old
5. , 【可选】为数字添加分隔符,如:1,000,000
6. .precision 【可选】小数位保留精度【同方法一,整型无小数】
这里以小詹年薪salary为例哈哈,注意关键区别在{}内:
a = "xiaozhan's salary is {:,d} per year".format(1000000)
print(a)
a = "xiaozhan's salary is {:.2f} per year".format(1000000)
print(a)
a = "xiaozhan's salary is {:,.2f} per year".format(1000000)
print(a)
#便于展示,结果放代码一起
>>>xiaozhan's salary is 1,000,000 per year
>>>xiaozhan's salary is 1000000.00 per year
>>>xiaozhan's salary is 1,000,000.00 per year
基本到这里,两种方法都学的差不多了,小伙伴们自己实操下肯定没啥问题。最后值得一提的是format方法中不一定要将所有值重复列,有重复的可以用类似字典键值对的形式存放。如下例,就用了num=15省去了重复列举15的过程:
a = "numbers: {num:b},{num:o},\
{num:d},{num:x},{num:X}, \
{char:c}".format(num=15,char=65)
print(a)
#便于展示,结果放代码一起
>>>numbers: 1111,17,15,f,F,A
方法一 % 格式符
基本形式:%[(name)][flags][width].[precision]typecode
(name) 可选,用于选择指定的key(与字典形式结合,选择指定的key,友情提醒,字典没有顺序的说法噢)
flags 可选,可供选择的值有: + - 空格 0
width 可选,占有宽度
.precision 可选,小数点后保留的位数(小詹友情提醒,整型d可是没有小数的说法噢)
typecode 必选!
以下结合实例说明每个参数的概念和使用:
1. (name) 可选,用于选择指定的key,输出字典中指定的key对应的值,字典中没有顺序,只有键值对对应即可:
a = "%(name)s is a %(sex)s of %(age)d years old."%{'age':22,'sex':'boy','name':'xiaozhan'}
print(a)
#运行的结果是(为便于查看,就放到代码一起了):
>>>xiaozhan is a boy of 22 years old.
2. flags 可选,可供选择的值有:(通常与width结合)
+ 右对齐;正数前加正号,负数前加负号;
- 左对齐;正数前无符号,负数前加负号;
空格 右对齐;正数前加空格,负数前加负号;
0 右对齐;正数前无符号,负数前加负号;用0填充空白处
3. width 可选,占有宽度
这里结合2.3,以对比右对齐和左对齐为例;如下的age部分:
a = "%(name)s is a %(sex)s of %(age)+5d years old."%{'age':22,'sex':'boy','name':'xiaozhan'}
print(a)
a = "%(name)s is a %(sex)s of %(age)-5d years old."%{'age':22,'sex':'boy','name':'xiaozhan'}
print(a)
#运行的结果是(为便于查看,就放到代码一起了):
>>>xiaozhan is a boy of +22 years old.
>>>xiaozhan is a boy of 22 years old.
4. .precision 可选,小数点后保留的位数(小詹再次提醒,不要忘了整型无小数噢)
这里比较好懂,还是那句话为例,只不过得把key:age改成float类型!
#认真比较区别!
a = "%(name)s is a %(sex)s of %(age)+10f years old."%{'age':22,'sex':'boy','name':'xiaozhan'}
print(a)
a = "%(name)s is a %(sex)s of %(age)+.10f years old."%{'age':22,'sex':'boy','name':'xiaozhan'}
print(a)
#运行的结果是(为便于查看,就放到代码一起了):
>>>xiaozhan is a boy of +22.000000 years old.
>>>xiaozhan is a boy of +22.0000000000 years old.
细心的朋友会发现上述两句仅有一点之差噢!没错,第一个是没有‘.’,那么10代表的是【width】,为占位宽度;第二个有‘.’,代表【.precision】,为小数点个数
5. typecode 必选(哎哟喂!唯一一个必选!)表示获取对应类型的值并格式化到指定位置
s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置
r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置
c,整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置
o,将整数转换成 八 进制表示,并将其格式化到指定位置
x,将整数转换成十六进制表示,并将其格式化到指定位置
d,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置
e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
F,同上
g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
%,当字符串中存在格式化标志时,需要用 %%表示一个百分号
这里用的最多应当是字符型‘s',整型'd',浮点数'f'~对应前边的age即可了解,不做重复举例啦~
这里来一个综合示例:(借用闹笑话那次的啦~)
#综合案例
name = input('name:')
sex = input('sex:')
age = int(input('age:'))
salary = int(input('salary:'))
info = '''\
------info of me-------
name:% 10s
sex:% 10s
age:% 10d
salary:% 10d
'''% (name,sex,age,salary)
print(info)
#运行过程放在这一起方便查看:
name:xiaozhan
sex:boy
age:22
salary:1000000
------info of me-------
name: xiaozhan
sex: boy
age: 22
salary: 1000000
方法二 format方式
基本形式: [[fill]align][sign][#][width][,][.precision][type]
fill 【可选】空白处填充的字符
align 【可选】对齐方式(需配合width使用)
sign 【可选】有无符号数字【同方法一的flags,仅+-0三种取值】
# 【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
, 【可选】为数字添加分隔符,如:1,000,000
width 【可选】格式化位所占宽度
.precision 【可选】小数位保留精度
type 【可选】格式化类型,类似方法一,不重复叙述
这里是用格式化字符串的函数 str.format(),它增强了字符串格式化的功能。基本语法是通过 {} 和 : 来代替以前的 % 。format 函数可以接受不限个参数,位置可以不按顺序。和第一种方法一样,以下结合实例说明每个参数的概念和使用:
1. fill 【可选】空白处填充的字符 这里比第一种方式拓展性好,可以指定填充的字符
2. align 【可选】对齐方式(需配合width使用)
<,内容左对齐
>,内容右对齐(默认)
^,内容居中
^,内容居中=,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
3. width 【可选】格式化位所占宽度
以上三个参数结合起来使用较为频繁,例如下面是不同姿势的'我爱小詹'
a = '---{:*<18s}--- span="" class="hljs-string" style="font-size: inherit; line-height: inherit; color: rgb(209, 241, 169); word-wrap: inherit !important; word-break: inherit !important;" a=".format('我爱小詹')
print(a)
#便于展示,结果放代码一起
>>>---我爱小詹**************---
>>>---*******我爱小詹*******---
>>>---**************我爱小詹---
4. # 【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
b,将10进制整数自动转换成2进制表示然后格式化
c,将10进制整数自动转换为其对应的unicode字符
d,十进制整数
o,将10进制整数自动转换成8进制表示然后格式化;
x,将10进制整数自动转换成16进制表示然后格式化(小写x)
X,将10进制整数自动转换成16进制表示然后格式化(大写X)
下面以小詹的age举例,以二进制的15为例(才不告诉你小詹才15岁呢):
a = 'xiaozhan is {:d} years old'.format(15)
print(a)
a = 'xiaozhan is {:b} years old'.format(15)
print(a)
a = 'xiaozhan is {:#b} years old'.format(15)
print(a)
#便于展示,结果放代码一起
>>>xiaozhan is 15 years old
>>>xiaozhan is 1111 years old
>>>xiaozhan is 0b1111 years old
5. , 【可选】为数字添加分隔符,如:1,000,000
6. .precision 【可选】小数位保留精度【同方法一,整型无小数】
这里以小詹年薪salary为例哈哈,注意关键区别在{}内:
a = "xiaozhan's salary is {:,d} per year".format(1000000)
print(a)
a = "xiaozhan's salary is {:.2f} per year".format(1000000)
print(a)
a = "xiaozhan's salary is {:,.2f} per year".format(1000000)
print(a)
#便于展示,结果放代码一起
>>>xiaozhan's salary is 1,000,000 per year
>>>xiaozhan's salary is 1000000.00 per year
>>>xiaozhan's salary is 1,000,000.00 per year
基本到这里,两种方法都学的差不多了,小伙伴们自己实操下肯定没啥问题。最后值得一提的是format方法中不一定要将所有值重复列,有重复的可以用类似字典键值对的形式存放。如下例,就用了num=15省去了重复列举15的过程:
a = "numbers: {num:b},{num:o},\
{num:d},{num:x},{num:X}, \
{char:c}".format(num=15,char=65)
print(a)
#便于展示,结果放代码一起
>>>numbers: 1111,17,15,f,F,A