【Python基础】之字符串格式化(%百分号形式和format形式)

     字符串的格式化主要有两种,第一种是%形式的,第二种是python特有的,format形式。

#百分号形式
s = "我是%s, 我今年%d岁。" % ("mary", 18)
print(s)# 我是mary, 我今年18岁。

#format形式
t = "我是{}, 我今年{}岁。".format('mary', 18)
print(t)# 我是mary, 我今年18岁。

1.百分号形式

格式:

  • %[(name)][flags][width].[precision]typecode(称为一个占位符)
  • 传值时,在字符串“...” 后加上百分号%和一个传值的元组,依次传入字符串中的%占位符。

格式说明:

  • []表示该项是可选的,在使用过程中,可以使用,也可以不使用;没有用[]括起来的%和typecode是必选的。
  • 当要字符串中要传入%号,那么用%%表示一个%,比如下方代码:
s = "酒精的度数是%.2f%%"%(47)
print(s)#酒精的度数是47.00%
  • [typecode]有以下常见的几种
  1. s:字符串
  2. d:整数
  3. o:将十进制整数转化为八进制,传入指定位置
  4. x:将十进制转化为十六进制,传入指定位置
  5. e/E:将整数/浮点数转化为科学记数法,传入指定位置
  6. f/F:将整数/浮点数转化为小数位数为6的浮点数,传入指定位置
  • [(name)] 传值时按照name传值,一定要加上(),传值时用字典传入,传入的参数可以不按照字符串中占位符的顺序,如下示例
s = "我是%(name)s, 我今年%(old)d岁。" % {'name': 'mary', 'old': 18}
print(s)# 我是mary, 我今年18岁。

t = "我是%(name)s, 我今年%(old)d岁。" % {'old': 18, 'name': 'mary'}
print(t)# 我是mary, 我今年18岁。
  • [flags]与[width]配合使用,[flags]表示该占位符的对齐方式,[width表示该占位符的宽度]

[flags]可以为以下四种符号:+,-, (空格), 0表示,所表示的意思如下,其中[width]也可以不设置,此时仅剩表格中的正负数的讨论

+ 右对齐 在[width]宽度下,占位符右对齐,如果传入值是一个正数,那么在右对齐的同时,在该数字前加+号,如果传入值是负数,则只右对齐,不作其他操作。
空格 右对齐 在[width]宽度下,占位符右对齐,如果传入值是一个正数,即使传入值前加+号,字符串中也不加正好,同时将原本该用+号的地方用空格替代,如果传入的是一个负数,那么只右对齐,不作其他操作。
0 右对齐 在[width]宽度下,占位符右对齐,其余部分用0填充,如果传入一个整数,不加+号,如果传入一个负数,那么-号放在最左边。
- 左对齐 在[width]宽度下,左对齐,其余地方空格,正数前不加+,负数前加-

 

s = "我是%(name)s, 我今年%(old)+8d岁。" % {'name': 'mary', 'old': +18}
print(s)# 我是mary, 我今年     +18岁。


s = "我是%(name)s, 我今年%(old) 8d岁。" % {'name': 'mary', 'old': +18}
print(s)# 我是mary, 我今年      18岁。


s = "我是%(name)s, 我今年%(old)-8d岁。" % {'name': 'mary', 'old': +18}
print(s)# 我是mary, 我今年18      岁。


s = "我是%(name)s, 我今年%(old)08d岁。" % {'name': 'mary', 'old': +18}
print(s)# 我是mary, 我今年00000018岁。

 

  • [precision]表示当该占位符表示一个浮点数时,小数点后的位数,默认情况下为小数点后6位。
s = "%f" %(6.0)
print(s) #6.000000

当需要仅保留小数点后2位时:

s = "%.2f" %(6.0)
print(s) #6.00

2.format格式

格式:

  • 占位符用{}表示,内部格式为:[[fill]align][sign][#][0][width][,][.precision][type],[]表示可选,所以当{}中什么都没有时,传入什么值就是什么值。
  • 传值时,整体字符串的格式为:".....".format(传入的值),""中包含一些用{}表示的占位符。

格式说明:

  • [fill]:按照某宽度对齐时空白处填充的字符
  • [align]:对齐方式:<左对齐;>右对齐; =仅针对数字类型,右对齐,符号放在填充字符的左侧; ^居中
  • [sign]:针对数字的正负号约定,+正好负号都加;-正号不变,负号要加;空格 正好处用空格填充,负号要加
  • [#]: 对与二进制/八进制/十六进制数,加上#,字符串中会显示0b/0o/0x
  • [,]: 为数字添加分隔符,例如1000000,表示为1,000,000
  • [.precision]: 小数的保留位数
  • [type]: 与百分号形式的相同,参见上文中的表格
  • 声明格式时,都要在{}中先输入冒号:
s = "我是{}, 我今年{}岁。".format('mary', 18)#需按顺序传入
print(s)# 我是mary, 我今年18岁。

s = "我是{1}, 我今年{0}岁。".format(18, 'mary')#需按下标传入
print(s)# 我是mary, 我今年18岁。

s = "我是{name}, 我今年{old}岁。".format(old=18, name='mary')#需键值对传入
print(s)# 我是mary, 我今年18岁。

s = "我是{name}, 我今年{old}岁。".format(**{'old': 18, 'name': 'mary'})#需字典传入
print(s)# 我是mary, 我今年18岁。

s = "酒精的度数是{:.2f}%".format(47)
print(s)#酒精的度数是47.00%

 

你可能感兴趣的:(Python)