字符串:
所有标准序列操作(索引、切片、乘法、成员资格检查、长度、最小值和最大值)都适用于字符串,但别忘了字符串是不可变的,因此所有的元素赋值和切片赋值都是非法的。
字符串格式化:format方法
每个值都被插入字符串中,用来替用花括号括起来的替换字段
替换字段由下面的部分组成:
字段名:索引或者标识符,指出要设置哪个值的格式,并使用结果来替换该字段;还可以指定值的特殊部分,如列表内的元素
转换标志:跟在感叹号后面的单个字符。支持的字符包括:r(表示repr)、s(表示str)、a(表示ascii)。如果指定了转换标志,就不会用对象本身的格式,而是用指定函数将对象转换成字符串,然后进行格式设置
格式说明符:跟早冒号后面的表达式。让我们能详细的指定最终的格式,包括:格式类型、字段宽度、数的精度、如何显示符号、千位分隔符、各种对齐和填充方式
替换字段名:
向format提供要设置格式的未命名参数,并在格式字符串中使用,会按顺序将字段和参数配对
可以给参数指定名称,该参数会对应在格式字符中的字段
>>> "{foo}{}{bar}{}".format(1, 3, bar="a", foo=5)
‘51a3‘
可以通过索引来指定要在哪个字段中使用相应的未命名参数,这样就可以不按顺序使用未命名参数
>>> "{foo}{1}{bar}{0}".format(1, 3, bar="a", foo=5)
‘53a1‘
可以使用提供值中的一部分部分
>>> f = ["hello", "world"]
>>> "hi {foo[1]}".format(foo=f)
‘hi world‘
可以使用句点来使用导入模块中的方法、属性、变量、函数(__name__获取指定模块的名称)
>>> import math
>>> tmp = "The {mod.__name__} module defines the value {mod.pi} for π"
>>> tmp.format( mod=math)
‘The math module defines the value 3.141592653589793 for π‘
基本转换:
使用转换标志设置值的格式
>>> print("{pi!s} {pi!r} {pi!a}".format(pi="π"))
π ‘π‘ ‘\u03c0‘
# s:str,将值创建为人易读的普通字符串
# r:repr,将值创建成给定的Python表达式
# a:ascii,创建ascii字符的表示
将要转换的值视为哪种类型,比如一个整数,但是要作为小数处理,就在冒号后面加上:f。要当做二进制处理就加上:b
>>> "This number is {num}".format(num=33)
‘This number is 33‘
>>> "This number is {num:f}".format(num=33)
‘This number is 33.000000‘
>>> "This number is {num:b}".format(num=33)
‘This number is 100001‘
在冒号(格式说明符)后面使用类型说明符,类型说明符有:
b # 将整数表示为二进制数
c # 将整数解读为Unicode码点
d #将整数视为十进制数进行处理,这是整数默认使用的说明符
e # 使用科学计数法来表示小数(e表示指数)
E # 与e相同,但是使用E来表示指数
f # 将小数表示为定点小数
F # 与f相同,但是对于特殊值(nan和inf),使用大写表示
g #自动在定点表示和科学计数表示之间做出选择;这是默认用于小数的说明符,默认情况下至少有一位小数
G #与g相同,但使用大写来表示指数和特殊值
n # 与g相同,但插入随区域而异的数字分隔符
o # 将整数表示为八进制数
s # 保持字符串的格式不变,默认用于字符串的说明符
x # 将整数表示为十六进制数并使用小写字母
X # 与x相同,但使用大写字母
% # 将数表示为百分比值(乘以100,按说明符f设置格式,再在后面加上%)
宽度:
宽度使用整数指定
>>> "{num:10}".format(num=3)
‘ 3‘
>>> "{name:10}".format(name="bone")
‘bone ‘
# 可见数字是右对齐进行空位填充,字符串是左对齐进行填充
精度:
设置浮点数格式默认保留6位小数,要更改序要设置精度
精度使用整数指定,要在整数前面加上句点号:.
>>> "This number is {num:.2f}".format(num=33.345678)
‘This number is 33.35‘
# 可以同时指定宽度和精度
>>> "This number is {num:10.2f}".format(num=33.345678)
‘This number is 33.35‘
千位分隔符:
使用逗号添加
>>> "number is {:,}".format(10**100)
‘number is 10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000‘
同时指定其他格式设置时,逗号要放在表示宽度和表示精度的句点之间
"number is {:12.2f}".format(99999999)
‘number is 99999999.00‘
>>> "number is {:12,.2f}".format(99999999)
‘number is 99,999,999.00‘
对齐和填充:
字符串和数字默认的对齐方式不同,若要修改对齐方式,可以在指定宽度和精度的数前面添加一个标志
# 左对齐:<
# 右对齐:>
# 居中:^
>>> print("{0:<10.2f}\n{0:>10.2f}\n{0:^10.2f}".format(3.1415926))
3.14
3.14
3.14
可以指定填充字符来替代默认的空格
>>> "{:#^16}".format("go")
‘#######go#######‘
等于号:=;用来将填充的字符放在符号和数字之间
>>> "{:=16.2f}".format(-3.1415)
‘- 3.14‘
>>> "{:#=16.2f}".format(-3.1415)
‘-###########3.14‘
给正数加上说明符,放在对齐说明符后面
# 默认设置,符号是:-
>>> print("{0:.2}\n{1:.2}".format(3.1415, -3.1415))
3.1
-3.1
>>> print("{0:-.2}\n{1:-.2}".format(3.1415, -3.1415))
3.1
-3.1
# 改为+号
>>> print("{0:+.2}\n{1:+.2}".format(3.1415, -3.1415))
+3.1
-3.1
# 指定为空格
>>> print("{0: .2}\n{1: .2}".format(3.1415, -3.1415))
3.1
-3.1
井号:#;将其放在符号说明符和宽度之间,将处罚一种转换方式,随类型而异
# 对于二进制、八进制、十六进制会加前缀
>>> "{:b}".format(42)
‘101010‘
>>> "{:#b}".format(42)
‘0b101010‘
# 对于十进制,必须包含小数点(g类型保留小数点后的0)
>>> "{:g}".format(42)
‘42‘
>>> "{:#g}".format(42)
‘42.0000‘