Python 内置函数:repr()

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__() 能显著提升调试效率。

图片

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值