%号格式化字符串的方式从Python诞生之初就已经存在,
目前,Python官方没有弃用这种方式,但也不推荐这种方式。
print (‘我叫%s, 身高%scm’ % (name,height)) ** 传入的值为元组,依次填充
%s :占位符 str()
%d-:十进制 整数
%x : 十六进制
%f :浮点型
指定长度:
%5d 右对齐,不足左边补空格
%-5d - 代表左对齐,不足右边默认补空格
%05d 右对齐,不足左边补0
浮点数:
%f 默认是输出6位有效数据, 会进行四舍五入
指定小数点位数的输出 %.2f—保留小数点后2位
‘%4.8f’ 4代表整个浮点数的长度,包括小数,只有当字符串的长度大于4位才起作用.不足4位空格补足,可以用%04.8使用0补足空格
1.格式化的字符串(%s)与被格式化的字符串(传入的值)必须按照位置一一对应。
print('my name is %s and my age is %s' % ('Bob', '18'))
# my name is Bob and my age is 18
2.可以通过字典方式格式化,打破位置带来的限制和困扰
print('my name is %(name)s and my age is %(age)s' % {'age': '18', 'name': 'Bob'})
# my name is Bob and my age is 18
该format方法实在Python2.6中引入的是字符串类型的内置方法。
因为str.format的方式在性能上和使用的灵活程度上都比%更胜一筹,所以推荐使用。
按照位置顺序一 一对应
str = 'my name is {} and my age is {}'.format('Bob', '18')
print(str)
# my name is Bob and my age is 18
使用索引获取对应的值
str = 'my name is {1} and my age is {0}'.format('18', 'Bob')
print(str) # my name is Bob and my age is 18
通过关键字参数或者字典方式可视化,打破位置带来的限制和困扰
str = 'my name is {name} and my age is {age}'.format(name='Bob', age=18)
print(str) # my name is Bob and my age is 18
dict1 = {'name': 'Bob', 'age': 18}
str1 = 'my name is {name} and my age is {age}'.format(**dict1) # 使用**解包操作
print(str1) # my name is Bob and my age is 18
print('姓名是:{name},年龄是:{age}'.format(name='Tom',age=20))
输出:
姓名是:Tom,年龄是:20
变量中使用
name = Ada
age = 20
print('Name is {name},age is {age}'.format(name=name,age=age))
先取到值,然后再冒号后设定填充方式:[填充方式][对齐方式][宽度]
{:5} 指定输出长度=50
字符串 {:50}–左对齐
数值 {:50}–右对齐
使用 > < 可以避免字符串/数值对齐方法不一致
右对齐,不足的长度用表示
< 左对齐,不足的长度用表示
^ 中间对齐, 不足的长度用*表示
: 号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
*<50 ,左对齐,50个字符,不够的用‘*’填充
print('{0:*<50}'.format('Hello World'))
# Hello World***************************************
*>50 ,右对齐,50个字符,不够的用‘*’填充
print('{0:*>50}'.format('Hello World'))
# ***************************************Hello World
*^50 ,居中显示,50个字符,不够的用‘*’填充
print('{0:*^50}'.format('Hello World'))
# *******************Hello World********************
print('{0:.2f}'.format(3.1415926)) # 精确小数点后2位,四舍五入显示 3.14
print('{0:b}'.format(15)) # 以2进制显示 1111
print('{0:o}'.format(15)) # 以8进制显示 17
print('{0:x}'.format(15)) # 以16进制显示 f
print('{0:,}'.format(1000000)) # 千分位格式化 1,000,000
str.format()比%格式化高级了一些,但仍然有着自己缺陷,当传入的字符串过多时,仍然显得十分冗长。
Python3.6中引入了f-Strings,不仅比str.format()方法更简洁,同时性能上也略胜一筹。
name = 'Tom'
age = 20
print(f'姓名是:{name},年龄是:{age}')
输出结果:
姓名是:Tom,年龄是:20
① 什么是填充?
概念:当我们指定了字符串最终的长度的时候,如果现有的字符串没有那么长,那么我们就用某种
字符(填充字符)来填满这个长度,这就是“填充”。
② 演示代码如下:默认使用空格填充
name = "Huang Wei"
print(f"{name:>20}")
' Huang Wei'
print(f"{name:<20}")
'Huang Wei '
print(f"{name:^20}")
' Huang Wei '
③ 用指定字符进行填充
name = "Huang Wei"
print(f"{name:_>20}")
'___________Huang Wei'
print(f"{name:_<20}")
'Huang Wei___________'
print(f"{name:_^20}")
'_____Huang Wei______'
注意:填充分为左填充、右填充、居中填充。左填充表示在字符串左侧填充,右填充表示在字符串右侧填充,居中填充表示在字符串左右两侧对称填充。>表示左填充,<表示右填充,^表示居中填充。记忆方法:括号口朝左边,就表示左填充;括号口朝右边,就表示右填充
a = 12
b = -25
print(f"{a:+}")
'+12'
print(f"{b:+}")
'-25'
print(f"{a:-}")
'12'
print(f"{b:-}")
'-25'
print(f"{a: }")
' 12'
print(f"{b: }")
'-25'
当需要格式化的数据类型是“字符串”的时候,才会发生截断。
截断的含义,以及发生截断的条件,都可以可参考我文章开头提到的文章。
a = "Hello"
# 当发生截断的时候,如果不指定填充符,默认使用空格填充
print(f"{a:10.3}")
'Hel '
# 在发生截断的时候,使用指定的填充符
print(f"{a:_>10.3}")
'_______Hel'
print(f"{a:_<10.3}")
'Hel_______'