字符串操作符

操作符 *

操作符 * 可以实现将字符串重复 n(整数)遍相连接:

'Python' * 3
'PythonPythonPython'

n 是小于 1 的整数,则得到空字符串:

'Python' * -1
''

* 操作符可以与 = 连用,重复拼接并赋值:

a = 'py'
a *= 3
a
'pypypy'

由于字符串是可迭代对象,因此可以使用 * 对字符串进行拆包:

(*'Python',)
('P', 'y', 't', 'h', 'o', 'n')

操作符 %

字符串使用 % 操作符,官方文档叫 “printf 风格的字符串格式化”。比较早的格式化方法,官方已不推荐使用,了解它能更好地读懂别人的代码。

转换标记符包含两个或更多字符并具有以下组成,且必须遵循如下规定的顺序:

  1. ‘%’ 字符,用于标记转换符的起始。
  2. 映射键(可选),由加圆括号的字符序列组成。
  3. 转换旗标(可选),用于影响某些转换类型的结果。
  4. 最小字段宽度(可选)。如果指定为 ‘*’ (星号),则实际宽度会从 values 元组的下一元素中读取,要转换的对象则为最小字段宽度和可选的精度之后的元素。
  5. 精度(可选),以在 ‘.’ (点号) 之后加精度值的形式给出。如果指定为 ‘*’ (星号),则实际精度会从 values 元组的下一元素中读取,要转换的对象则为精度之后的元素。
  6. 长度修饰符(可选)。
  7. 转换类型。
'hi %r' % 'python'
"hi 'python'"
'%s %r' % ('hi','python')
"hi 'python'"

转换旗标为:

标志 含义
‘#’ 值的转换将使用“替代形式”。
‘0’ 转换将为数字值填充零字符。
‘-’ 转换值将靠左对齐(如果同时给出 ‘0’ 转换,则会覆盖后者)。
’ ' (空格) 符号位转换产生的正数(或空字符串)前将留出一个空格。
‘+’ 符号字符 (’+’ 或 ‘-’) 将显示于转换结果的开头(会覆盖 ”空格” 旗标)。
'A is %#x' % 18
'A is 0x12'
'A is %    d' % 18
'A is  18'
'A is %05o' % 18
'A is 00022'

转换类型为:

转换符 含义
’d’ 有符号十进制整数。
‘i’ 有符号十进制整数。
‘o’ 有符号八进制数。
‘x’ 有符号十六进制数(小写)。
‘X’ 有符号十六进制数(大写)。
’e’ 浮点指数格式(小写)。
‘E’ 浮点指数格式(大写)。
‘f’ 浮点十进制格式。
‘F’ 浮点十进制格式。
‘g’ 浮点格式。如果指数小于 -4 或不小于精度则使用小写指数格式,否则使用十进制格式。
‘G’ 浮点格式。如果指数小于 -4 或不小于精度则使用大写指数格式,否则使用十进制格式。
‘c’ 单个字符(接受整数或单个字符的字符串)。
‘r’ 字符串(使用repr() 转换任何 Python 对象)。
’s’ 字符串(使用str() 转换任何 Python 对象)。
‘a’ 字符串(使用ascii() 转换任何 Python 对象)。
‘%’ 不转换参数,在结果中输出一个 ‘%’ 字符。
'%f' % 3.14
'3.140000'
'%.3e' % 3.14
'3.140e+00'
'%.1f%%' % (3.14*100)
'314.0%'

当右边的参数为一个字典(或其他映射类型)时,字符串中的格式 必须包含加圆括号的映射键,对应 % 字符之后字典中的每一项。映射键将从映射中选取要格式化的值:

'%(language)s has %(number)03d quote types.' %\
{'language': "Python", "number": 2}
'Python has 002 quote types.'