python str.format知识点备忘
2021-07-08 20:05
语法 str.format(*args, **kwargs)
它通过{}和:来代替%。
"映射”示例:1.通过位置
In [1]: ‘{0},{1}‘.format(‘kzc‘,18) Out[1]: ‘kzc,18‘ In [2]: ‘{},{}‘.format(‘kzc‘,18) Out[2]: ‘kzc,18‘ In [3]: ‘{1},{0},{1}‘.format(‘kzc‘,18) Out[3]: ‘18,kzc,18‘
2.通过关键字参数
In[5]:‘{name},{age}‘.format(age=18,name=‘kzc‘) Out[5]: ‘kzc,18‘
或字典方式
In [9]: dic={‘name‘:‘ytjoh‘,‘age‘:48} ...: ‘{name},{age}‘.format(**dic) Out[9]: ‘ytjoh,48‘
list和tuple可以通过“打散”成普通参数给函数(使用*),而dict可以打散成关键字参数给函数(**)。所以可以轻松的传个list/tuple/dict给format函数。
3.通过对象属性
In [28]: class Person: ...: def __init__(self,name,age): ...: self.name,self.age = name,age ...: def __str__(self): ...: return ‘This guy is {self.name},is {self.age} old‘.format(self=self) In [29]: str(Person(‘ytjoh‘,48)) Out[29]: ‘This guy is ytjoh,is 48 old‘
4.通过下标
In [30]: p=[‘ytjoh‘,48] ...: ‘{0[0]},{0[1]}‘.format(p) Out[30]: ‘ytjoh,48‘
In [40]: dic={‘name‘:‘ytjoh‘,‘age‘:48} ...: ‘{d[name]},{d[age]}‘.format(d=dic) Out[40]: ‘ytjoh,48‘
用%s和%r替换
In [35]: "repr() shows quotes: {!r}; str() doesn‘t: {!s}".format(‘test1‘, ‘test2‘) Out[35]: "repr() shows quotes: ‘test1‘; str() doesn‘t: test2"
In [31]: ‘{:>8}‘.format(‘ytjoh‘) Out[31]: ‘ ytjoh‘
format_spec详解
在这里,我们重点看一下格式描述(format_spec)这一项。
格式描述中含有6个选项,分别是 fill、align、sign、width、precision、type。 它们的位置关系如下:
[[fill]align][sign][#][0][width][,][.precision][type]
fill 可以是任意字符,默认为空格。
align 仅当指定最小宽度时有效。
左对齐(默认选项)
> 右对齐
= 仅对数字有效;将填充字符放到符号与数字间,例如 +0001234
^ 居中对齐
sign 仅对数字有效
+ 所有数字均带有符号
- 仅负数带有符号(默认选项)
即空格;正数前面带空格,负数前面带符号
‘#‘ 只对整数有效
自动在二进制、八进制、十六进制数值前添加对应的 0b、0o、 0x。
‘,‘ 自动在每三个数字之间添加 , 分隔符。
width 十进制数字,定义最小宽度。如果未指定,则由内容的宽度来决定。
如果没有指定对齐方式(align),那么可以在 width 前面添加一个0来实现自动填充0,等价于 fill 设为 0 并且 align 设为 =。
precision 用于确定浮点数的精度,或字符串的最大长度。不可用于整型数值。
type 确定参数类型,默认为 s ,即字符串。
整数输出类型:
b:以二进制格式输出
c:将整数转换成对应的 unicode 字符
d:以十进制输出(默认选项)
o:以八进制输出
x:以十六进制小写输出
X:以十六进制大写输出
n:与 d 相同,但使用当前环境的分隔符来分隔每3位数字
十进制浮点数输出类型:
e:指数标记;使用科学计数法输出,用e来表示指数部分,默认 precision 为6
E:与 e 相同,但使用大写 E 来表示指数部分
f:以定点形式输出数值,默认 precision 为6
F:与 f 相同
g:通用格式;对于给定的 precision p >= 1,取数值的p位有效数字,并以定点或科学计数法输出(默认选项)
G:通用格式;与 g 相同,当数值过大时使用 E 来表示指数部分
n:与 g 相同,但使用当前环境的分隔符来分隔每3位数字
%:百分比标记;使用百分比的形式输出数值,同时设定 f 标记
相关函数:format : 内置函数
用法:format(value[, format_spec])
本函数把值value按format_spec的格式来格式化,然而函数解释format_spec是根据value的类型来决定的,不同的类型有不同的格式化解释。当参数format_spec为空时,本函数等同于函数str(value)的方式。
其实本函数调用时,是把format(value, format_spec)的方式转换为type(value).__format__(format_spec)方式来调用,因此在value类型里就查找方法__format__(),如果找不到此方法,就会返回异常TypeError
In [36]: print(‘aaaa‘.__format__(‘?>20‘)) ????????????????aaaa In [36]: In [37]: format(‘aaaa‘,‘?>20‘) Out[37]: ‘????????????????aaaa‘
上一篇:java中捕获异常