Python 中 str() 和 repr() 有什么区别?

str() 面向用户生成可读字符串,repr() 面向开发者生成可重现对象的精确表示。print 用 str,交互式终端回显用 repr。本文用示例说明区别与 __str__/__repr__ 自定义方法。

最佳实践
Python 中 str() 和 repr() 有什么区别?封面

一句话:str() 给人看(可读性优先),repr() 给机器/开发者看(精确性优先,理想情况下能 eval 还原对象)。例如字符串:str 是 hello,repr 是 'hello'(带引号)。

直观对比

s = 'hello\n'
print(str(s))    # hello(换行真的生效)
print(repr(s))   # 'hello\n'(转义可见,带引号)

import datetime
d = datetime.datetime(2024, 1, 15)
str(d)    # '2024-01-15 00:00:00'
repr(d)   # 'datetime.datetime(2024, 1, 15, 0, 0)'

自定义类中的两个魔术方法

class Point:
    def __init__(self, x, y): self.x, self.y = x, y
    def __repr__(self): return f'Point({self.x}, {self.y})'   # 开发者视角
    def __str__(self):  return f'({self.x}, {self.y})'        # 用户视角

至少要写 __repr__——没定义 __str__ 时 str() 会回退用 __repr__;反之不行。

常见问题(FAQ)

Q:日志里该用哪个? 记录对象状态用 repr(或 f'{obj!r}'),信息更全,排障友好。

Q:列表打印元素时用的哪个? 容器内元素一律用 repr——所以列表里的字符串显示带引号。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台