将值转换为字符串并设置其格式是一个重要的操作。
一、精简版
1、使用字符串格式运算符---%
>>> format = "Hello, %s!" >>> value = "Python" >>> format % value 'Hello, Python!'
%s称为转换说明符,s意味着将值视为字符串进行格式设置。
如果要设置多个值的格式,可使用元组:
>>> format = "Hello, %s! %s year." >>> values = ("Python", "Good") >>> format % values 'Hello, Python! Good year.'
2、使用字符串方法---format
编写新代码时,应选择使用字符串方法format,它融合并强化了早期方法的优点。
每个替换字段都用花括号括起。
最简单的情况下,替换字段没有名称或将索引用作名称。
>>> "{}, {} and {}".format("first", "second", "third") 'first, second and third' >>> "{0}, {1} and {2}".format("first", "second", "third") 'first, second and third' >>> "{1}, {2} and {0}".format("first", "second", "third") 'second, third and first'
也可以对替换字段进行命名:
>>> from math import pi >>> "{name} is {value:.2f}".format(value=pi, name="Pi") 'Pi is 3.14'
二、完整版
这里的基本思想是对字符串调用方法format,并提供要设置其格式的值。
替换字段由如下几部分组成,每个部分都是可选的:
字段名: 索引或标识符,指出要设置哪个值的格式并使用结果来替换该字段。
转换标志:跟在叹号后面的单个字符。当前支持的字符包括r(表示repr)、s(表示str)、a(表示ascii)。
格式说明符:跟在冒号后面的表达式。
1、替换字段名
>>> "{foo} {} {bar} {}".format(1, 2, bar=4, foo=3) '3 1 4 2'
还可通过索引来指定要在哪个字段中使用相应的未命名参数。
>>> "{foo} {1} {bar} {0}".format(1, 2, bar=4, foo=3) '3 2 4 1'
还可以使用值的组成部分:
>>> users = ['Mike', 'John'] >>> "Mr {name[1]}".format(name=users) 'Mr John' >>> import math >>> tmpl = "The {mod.__name__} module defines the value {mod.pi} for Pi" >>> tmpl.format(mod=math) 'The math module defines the value 3.141592653589793 for Pi'
2、基本转换
>>> print("{pi!s} {pi!r} {pi!a}".format(pi="π")) π 'π' 'u03c0'
s通常创建外观普通的字符串版本。
r尝试创建给定值的Python表示。
a创建只包含ASCII字符的表示。
你还可指定要转换的值是哪种类型。
>>> "The number is {num}".format(num=42) 'The number is 42' >>> "The number is {num:f}".format(num=42) 'The number is 42.000000' >>> "The number is {num:b}".format(num=42) 'The number is 101010'
字符串格式设置中的类型说明符:
b 将整数表示为二进制数
c 将整数解读为Unicode值
d 将整数视为十进制数进行处理,这是整数默认使用的说明符
e 使用科学表示法来表示小数(用e来表示指数)
E 与e相同,但用E来表示指数
f 将小数表示为定点数
F 与f相同,但对于特殊值(nan和inf),使用大写表示
g 自动在定点表示法和科学表示法之间做出选择。这是默认用于小数的说明符
G 与g相同,但使用大写来表示指数和特殊值
n 与g相同,但插入随区域而异的数字分隔符
o 将整数表示为八进制数
s 保持字符串的格式不变
x 将整数表示为十六进制数并使用小写字母
X 与x相同,但使用大写字母
% 将数表示为百分比值
3、宽度、精度和千位分隔符
宽度是使用整数指定的:
>>> "{num:10}".format(num=3) ' 3' >>> "{name:10}".format(name="Python") 'Python '
如上所见,数字和字符串的对齐方式是不同的。
精度也是使用整数指定的,但需要在它前面加上一个表示小数点的句点。
>>> import math >>> "Pi day is {pi:.2f}".format(pi=math.pi) 'Pi day is 3.14'
也可以同时指定宽度和精度:
>>> "{pi:10.2f}".format(pi=math.pi) ' 3.14'
可使用逗号来指出要添加千位分隔符:
>>> "One googol is {:,}".format(10**10) 'One googol is 10,000,000,000'
同时指定其他格式设置元素时,这个逗号应该放在宽度和表示精度的句点之间。
>>> "One googol is {:50,.2f}".format(10**10) 'One googol is 10,000,000,000.00'