'{[index][ : [fill] align][sign][#][width][.precision][type]} {……}{……} '.format()
以上参数的意义是:
注意,格式中的[ ]内的参数都是可选参数,可以使用也可以不使用
**:**
后面出现的参数在format()
中的索引值,如果没有,则以format()
中的默认顺序自动分配fill
:指定空白处的填充符。align
:指定数字的对齐方式:This section contains examples of the str.format()
syntax and comparison with the old %
-formatting.
In most of the cases the syntax is similar to the old %
-formatting, with the addition of the {}
and with :
used instead of %
. For example, '%03.2f'
can be translated to '{:03.2f}'
.
The new format syntax also supports new and different options, shown in the following examples.
翻译:
本节包含
str.format()
语法示例以及与旧%
格式的比较。在大多数情况下,语法类似于旧的
%
- 格式,只是添加了{}
并用:
代替%
. 例如,'%03.2f'
可以翻译成'{:03.2f}'
.新格式语法还支持新的不同选项,如以下示例所示。
>>> '{0}, {1}, {2}'.format('a', 'b', 'c')
'a, b, c'
>>> '{}, {}, {}'.format('a', 'b', 'c') # 3.1+ only
'a, b, c'
>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{2}, {1}, {0}'.format(*'abc') # unpacking argument sequence
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad') # arguments' indices can be repeated
'abracadabra'
>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
'Coordinates: 37.24N, -115.81W'
>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)
'Coordinates: 37.24N, -115.81W'
>>> c = 3-5j
>>> ('The complex number {0} is formed from the real part {0.real} '
... 'and the imaginary part {0.imag}.').format(c)
'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.'
>>> class Point:
... def __init__(self, x, y):
... self.x, self.y = x, y
... def __str__(self):
... return 'Point({self.x}, {self.y})'.format(self=self)
...
>>> str(Point(4, 2))
'Point(4, 2)'
>>> coord = (3, 5)
>>> 'X: {0[0]}; Y: {0[1]}'.format(coord)
'X: 3; Y: 5'
%s
and %r
:替换%s
和%r
>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"
>>> '{:<30}'.format('left aligned')
'left aligned '
>>> '{:>30}'.format('right aligned')
' right aligned'
>>> '{:^30}'.format('centered')
' centered '
>>> '{:*^30}'.format('centered') # use '*' as a fill char
'***********centered***********'
%+f
, %-f
, and % f
and specifying a sign:替换%+f
、%-f
和% f
并指定一个符号
>>> '{:+f}; {:+f}'.format(3.14, -3.14) # show it always
'+3.140000; -3.140000'
>>> '{: f}; {: f}'.format(3.14, -3.14) # show a space for positive numbers
' 3.140000; -3.140000'
>>> '{:-f}; {:-f}'.format(3.14, -3.14) # show only the minus -- same as '{:f}; {:f}'
'3.140000; -3.140000'
%x
and %o
and converting the value to different bases:替换%x
并%o
并将值转换为不同的基数
>>> # format also supports binary numbers
>>> "int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)
'int: 42; hex: 2a; oct: 52; bin: 101010'
>>> # with 0x, 0o, or 0b as prefix:
>>> "int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)
'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'
使用逗号作为千位分隔符
>>> '{:,}'.format(1234567890)
'1,234,567,890'
表示百分比
>>> points = 19
>>> total = 22
>>> 'Correct answers: {:.2%}'.format(points/total)
'Correct answers: 86.36%'
使用特定于类型的格式
>>> import datetime
>>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
>>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
'2010-07-04 12:15:58'
嵌套参数和更复杂的示例
>>> for align, text in zip('<^>', ['left', 'center', 'right']):
... '{0:{fill}{align}16}'.format(text, fill=align, align=align)
...
'left<<<<<<<<<<<<'
'^^^^^center^^^^^'
'>>>>>>>>>>>right'
>>>
>>> octets = [192, 168, 0, 1]
>>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
'C0A80001'
>>> int(_, 16)
3232235521
>>>
>>> width = 5
>>> for num in range(5,12):
... for base in 'dXob':
... print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ')
... print()
...
5 5 5 101
6 6 6 110
7 7 7 111
8 8 10 1000
9 9 11 1001
10 A 12 1010
11 B 13 1011
obj = 'world'
name = 'python'
print('hello, {obj} ,i am {name}'.format(obj = obj,name = name))
# 输入结果:hello, world ,i am python
obj = 'world'
name = 'python'
print('hello, {obj} ,i am {name}'.format(obj = obj,name = name))
# 输入结果:hello, world ,i am python
list=['world','python']
print('hello {names[0]} i am {names[1]}'.format(names=list))# 输出结果:hello world i am python
print('hello {0[0]} i am {0[1]}'.format(list)) #输出结果:hello world i am python
dict={‘obj’:’world’,’name’:’python’}
print(‘hello {names[obj]} i am {names[name]}’.format(names=dict))
结果hello world i am python
class Names():
obj='world'
name='python'
print('hello {names.obj} i am {names.name}'.format(names=Names))
#输入结果hello world i am python
args = [‘,’,’inx’]
kwargs = {‘obj’: ‘world’, ‘name’: ‘python’}
print(‘hello {obj} {} i am {name}’.format(*args, **kwargs))#输入结果:hello world , i am python
注意:魔法参数跟你函数中使用的性质是一样的:这里format(*args, **kwargs))
等价于:format(‘,’,’inx’,obj = ‘world’,name = ‘python’)
%r
或者{!r}
在python中的意思都是python的转译字符, 类似于%r, %d,%f
简单的例子
>>> a = '123'
>>> b = 'hello, {!r}'.format(a)
>>> b
"hello, '123'"
例子用的是format,跟直接%效果类似,注意结果中包含的是字符串原意。
例子二
>>> a = '123'
>>> b = 'hello, %r' % a
>>> b
"hello, '123'"
这对一部分的对象还是很有用的。r直接反应对象本体。
比如说,
>>> b = 'hello, %r' % 123
>>> b
'hello, 123'
123的本体就是123。
还看下面的这个例子
>>> b = 'hello, !r' % '123'
Traceback (most recent call last):
File "", line 1, in
TypeError: not all arguments converted during string formatting
>>>
!
符号,这个只在fromat中有用,要注意方法。但是效果类似
>>> b = 'hello, %r' % '123'
>>> b
"hello, '123'"
>>> b = 'hello, {!r}'.format( '123')
>>> b
"hello, '123'"