这里是
格式语法的具体细节解释。使用
str.format
方法,您可以填充给定字符串实例中形如
{...}
的占位符。它们按以下方式使用位置参数:
>>> '{}:{}'.format(1, 2)
'1:2'
>>> '{0}:{1}'.format(1, 2)
'1:2'
>>> '{1}:{0}'.format(1, 2)
'2:1'
这意味着您可以在花括号内指定位置参数的编号。字符串可以多次引用位置参数:
>>> '{0}:{1}:{0}'.format(1, 2)
'1:2:1'
使用
.x
符号可以让您访问该参数的属性。例如:
>>> class Test:
... x = 1
... y = 2
...
>>> '{0.x}:{0.y}'.format(Test)
'1:2'
通过使用!r
,您可以强制使用该对象的__repr__
而不是__str__
。例如:
>>> class Test:
... def __str__(self):
... return '__str__'
... def __repr__(self):
... return '__repr__'
...
>>> '{0}'.format(Test())
'__str__'
>>> '{0!s}'.format(Test())
'__str__'
>>> '{0!r}'.format(Test())
'__repr__'
所以,结合所有这些信息,我们得到以下内容:
'Point({0.x!r}, {0.y!r})'.format(self)
这里定义了一个带有两个占位符的格式化字符串({0.x!r}
和{0.y!r}
)。它们应该用第一个位置参数的x
和y
属性填充(请记住,{0}
将被替换为第一个参数,所以{0.x}
请求该参数的x
属性)。最后,!r
请求该对象的__repr__
而不是默认的__str__
。
同样的推理也适用于__str__
方法。
顺便说一下,格式化语法还允许关键字参数,并且可以通过其名称进行引用:
>>> '{first}:{second}'.format(first=1, second=2)
'1:2'
>>> '{second}:{first}'.format(first=1, second=2)
'2:1'