1.12. 格式化字符串

Python支持将值的格式化输出到字符串中。尽管这样可能包括非常复杂的表达式,但最基本的用法是将一个值插入到一个有着字符串有 %s 占位符的字符串中。

Note
在Python中,字符串格式化使用与C中 sprintf 函数一样的语法。

例 1.28. 字符串格式化介绍

>>> k = "uid"
>>> v = "sa"
>>> "%s=%s" % (k, v) 1
'uid=sa'
1 整个表达式计算结果为一个字符串。第一个 %s 被变量 k 的值替换;第二个 %s 被字典 params 中的键字为 k 的值替换。在字符串中所有其它的字符(在这个例子中,是等号)按原样保留。

注意(k,v)是一个序列。我说过它们对某些东西有用。

你可能一直在想做了这么多工作只是为了做简单的字符串连接,你想的不错;只不过字符串格式化不只是连接。它甚至不仅仅是格式化。它也是强制类型转换。

例 1.29. 字符串格式化对比字符串连接

>>> uid = "sa"
>>> pwd = "secret"
>>> print pwd + " is not a good password for " + uid      1
secret is not a good password for sa
>>> print "%s is not a good password for %s" % (pwd, uid) 2
secret is not a good password for sa
>>> userCount = 6
>>> print "Users connected: %d" % (userCount, )           3 4
Users connected: 6
>>> print "Users connected: " + userCount                 5
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
TypeError: cannot add type "int" to string
1 + 是字符串连接操作符。
2 在这个简单例子中,字符串格式化实现与连接一样的结果。
3 (userCount, )是一个一元素的元组。是的,语法有一点奇怪,但是对此有相当好的理由:很明显这是一个元组。实际上,当定义一个列表、元组或字典时,你可以总是在最后一个元素后面跟上一个逗号,但是当定义一个一元素的元组时逗号是必须的。如果逗号不是必须的,Python不会知道 (userCount) 是一个一元素的元组还仅仅是 userCount 的值。
4 字符串格式化通过将 %s 替换成 %d 即可处理整数。
5 试图将一个字符串同一个非字符串连接会引发一个异常。与字符串格式化不同,字符串连接只能在每个都是字符串时起作用。

进一步阅读