python3中打印的格式r(repr)

Posted

技术标签:

【中文标题】python3中打印的格式r(repr)【英文标题】:format r(repr) of print in python3 【发布时间】:2016-01-25 01:39:44 【问题描述】:
>>>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中使用。为什么会这样?

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

【问题讨论】:

【参考方案1】:

您要查找的内容称为转换标志。应该这样指定

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

引用 Python 3 的 official documentation,

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

请注意,Python 2 仅支持 !s!r。根据 Python 2 的 official documentation,

目前支持两种转换标志:'!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'"

引用official documentation的例子,

替换%s%r

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

【讨论】:

【参考方案2】:

在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'

请注意,两者都返回用单引号括起来的“我爱你”。

【讨论】:

以上是关于python3中打印的格式r(repr)的主要内容,如果未能解决你的问题,请参考以下文章

内置函数:repr

pytho 的基本语法

python3.x __str__与__repr__

__str__和__repr的区别

python 中 打印及格式化字符串的相关方法

Python format 格式化函数