Python3中print函数的格式化输出(repr)怎么实现?

22
>>>print('You say:{0:r}'.format("i love you"))
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    print('You say:{0:r}'.format("i love you"))
ValueError: Unknown format code 'r' for object of type 'str'

我在Python2中使用%r(repr()),在Python3.5中也应该可以工作。为什么呢?

此外,我应该使用什么格式?

2个回答

39
你所寻找的是叫做转换标志。它应该像这样指定:

>>> print('you say:{0!r}'.format("i love you"))
you say:'i love you'

引用Python3的官方文档

目前支持三个转换标志:'!s'调用值上的str()'!r'调用repr()'!a'调用ascii()

请注意,Python2仅支持!s!r。根据Python2的官方文档

目前支持两个转换标志:'!s'调用值上的str()'!r'调用repr()


在Python 2中,你可能会做类似这样的事情:
>>> 'you say: %r' % "i love you"
"you say: 'i love you'"

即使在Python 2(也适用于Python 3),您也可以使用!rformat编写相同的内容,例如:
>>> 'you say: {!r}'.format("i love you")
"you say: 'i love you'"

引用来自官方文档的例子,

Replacing %s and %r:

>>> "repr() shows quotes: {!r}; str() doesn't: {!s}".format('test1', 'test2')
"repr() shows quotes: 'test1'; str() doesn't: test2"

7
在Python3的f-string格式化中,你也可以使用:
print(f"You say:{'i love you'!r}")
You say:'i love you'
print(f'You say:{"i love you"!r}')
You say:'i love you'

请注意,两者都以单引号括起来返回“i love you”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接