repr() 是 Python 内置函数之一,用于获取对象的“官方”字符串表示(official string representation)。
与 str() 不同,repr() 返回的字符串主要面向开发者和调试场景,强调精确性和可复现性,通常格式更接近 Python 代码,并且在可能的情况下可以用 eval() 还原为原对象(需确保安全性)。
一、函数语法
repr(object)
参数:
object:任意 Python 对象。
该对象需实现 __repr__() 方法,否则会使用默认的表示形式(如 <ClassName object at 0x...>)。
返回值:
返回对象的解释器可读字符串表示(str 类型)。
二、基础用法示例
1、 基本类型
print(repr(123)) # '123'print(repr(3.14)) # '3.14'print(repr(True)) # 'True'print(repr(None)) # 'None'
2、字符串类型
s = "Hello\nWorld"print(str(s)) # 输出带换行# Hello# World
print(repr(s)) # 输出带转义字符:'Hello\nWorld'
repr() 会保留转义字符而不是直接显示换行,这在调试字符串内容时非常有用。
3、容器类型
print(repr([1, 2, 3])) # '[1, 2, 3]'print(repr({'a': 1, 'b': 2}))# "{'a': 1, 'b': 2}"
三、进阶技巧
1、交互模式下的表现
在 Python 交互式解释器中,直接输入变量名时会调用 repr(),而 print() 会调用 str():
>>> "Hello\nWorld"'Hello\nWorld' # repr() 效果
>>> print("Hello\nWorld")HelloWorld # str() 效果
2、自定义 __repr__() 方法
为了让 repr() 输出更有意义,可以在自定义类中重写 __repr__() 方法:
class Point: def __init__(self, x, y): self.x, self.y = x, y
def __repr__(self): return f"Point({self.x}, {self.y})" # 返回可复现的字符串
p = Point(3, 4)print(repr(p)) # 'Point(3, 4)'
这种形式不仅直观,还便于调试和日志记录,并且在某些情况下能直接被 eval() 还原。
四、补充说明
1、repr() 与 str() 的区别
str():返回用户可读的字符串表示,面向终端输出和展示。
repr():返回更精确的、解释器可识别的表示,面向调试和开发。
2、可复现性限制
并非所有对象的 repr() 都能被 eval() 完全还原(尤其是涉及外部资源的对象)。
3、调用优先级
若对象同时定义了 __str__() 和 __repr__(),调用 repr() 时始终使用 __repr__()。
4、默认行为
若未定义 __repr__(),则返回 <ClassName object at 内存地址> 的形式。
📘 小结
repr() 是一个面向开发者的对象字符串化工具。
侧重精确性与可复现性,在调试、日志、序列化等场景中比 str() 更可靠。
对自定义对象,重写 __repr__() 能显著提升调试效率。

“点赞有美意,赞赏是鼓励”
6679

被折叠的 条评论
为什么被折叠?



