Python字符串格式:%vs.format

python中的字符串格式化程序通常被称为旧样式和新样式。旧式的是“%”.format被称为新的风格。

简单的位置格式是最常见的用例。如果参数的顺序不太可能更改并且要连接的元素很少,则使用这种格式。

示例

# 使用%的字符串连接
print('%s %s'%('one','two'))

# 使用.format的字符串连接
print('{} {}'.format('one','two'))

输出结果

one two
one two

使用新的样式格式,可以为占位符提供显式的位置索引。这样可以在不更改参数的情况下重新排列显示顺序。此功能在旧样式中不可用。

示例

print('{0} {1}'.format('one','two'))
print('{1} {0}'.format('one','two'))

输出结果

one two
two one

填充和对齐字符串

默认情况下,将值格式化为仅占用表示内容所需的尽可能多的字符。但是,可以定义将值填充为特定长度。

示例

print('%10s'%('test'))
print('{:>10}'.format('test'))

输出结果

      test
      test

截断长弦

也可以将过长的值截断为特定数目的字符。后面的数字。格式中的(点)指定输出的精度。对于字符串,这意味着输出将被截断为指定的长度。在我们的示例中,这将是3个字符。

示例

print('%.3s'%('nhooo',))
print('{:.3}'.format('nhooo'))

输出结果

inc
inc

号码

示例

print('%d' %(10000))
print('{:d}' .format(10000))

输出结果

10000
10000

参数化格式

新样式格式允许使用参数化动态指定格式的所有组件。参数化格式是括号中的嵌套表达式,可以在冒号之后的父格式中的任何位置出现。旧样式的格式也支持某些参数化,但局限性更大。即,它仅允许对输出的宽度和精度进行参数化。

示例

from datetime import datetime
dt = datetime(2019, 12, 19, 4, 5)
print('{:{dfmt} {tfmt}}'.format(dt, dfmt='%Y-%m-%d', tfmt='%H:%M'))

输出结果

2019-12-19 04:05

自定义对象

datetime示例通过使用__format__()magic方法起作用。但是,通过覆盖此方法,可以在自己的对象中定义自定义格式处理。这样可以完全控制所使用的格式语法。

示例

class Type2000(object):
  def __format__(self, format):
    if (format == 'test-format'):
      return "This is format example for include help."
    return 'Type 2000'

print('{:test-format}'.format(Type2000()))

输出结果

This is format example for include help.