返回介绍

建议34:深入理解 str() 和 repr() 的区别

发布于 2024-01-30 22:19:09 字数 1281 浏览 0 评论 0 收藏 0

函数str()和repr()都可以将Python中的对象转换为字符串,它们的使用以及输出都非常相似,以至于很多人认为这两者之间并没有区别,但事实是不是这样呢?先来看对于不同类型的输入,这两个函数的输出有何异同,如表3-6所示。

表3-6 str()和repr()函数在不同情况下输出比较

从表3-6看出,repr()和str()对于大多数数据类型的输出基本一致,因此混淆也就不难理解了。但它们也存在不一致的情况。那么,这两者之间到底有什么区别呢?总结来说有以下几点:

1)两者之间的目标不同:str()主要面向用户,其目的是可读性,返回形式为用户友好性和可读性都较强的字符串类型;而repr()面向的是Python解释器,或者说开发人员,其目的是准确性,其返回值表示Python解释器内部的含义,常作为编程人员debug用途。

2)在解释器中直接输入a时默认调用repr()函数,而print a则调用str()函数。

3)repr()的返回值一般可以用eval()函数来还原对象,通常来说有如下等式。

obj == eval(repr(obj))

但需要提醒的是,这个等式不是所有情况下都成立,如用户重新实现的repr()方法如下。

>>> s="' '"
>>> str(s)
"' '"
>>> repr(s)
'"\' \'"'
>>> eval(repr(s)) == s
True
>>> eval(str(s))
' '
>>> eval(str(s)) == s
False
>>>

4)这两个方法分别调用内建的__str__()和__repr__()方法,一般来说在类中都应该定义__repr__()方法,而__str__()方法则为可选,当可读性比准确性更为重要的时候应该考虑定义__str__()方法。如果类中没有定义__str__()方法,则默认会使用__repr__()方法的结果来返回对象的字符串表示形式。用户实现__repr__()方法的时候最好保证其返回值可以用eval()方法使对象重新还原。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文