repr()
是 Python 中一个内置函数,用于获取对象的“官方”字符串表示形式。这个字符串通常可以用来重新创建原始对象。与之相对的是 str()
函数,后者更侧重于可读性。在某些情况下,repr()
的输出可能对程序员更有帮助。
使用场景
当你需要生成一个能准确再现对象的字符串时,repr()
非常有用。这在调试和日志记录中尤其重要,因为这些场合下,你可能需要将对象转换为字符串,并稍后通过该字符串恢复对象。
示例
-- -------------------- ---- ------- ----- ------- --- -------------- ----- ----- --------- - ---- -------- - --- --- --------------- ------ ---------------------------- ---------------- ------ - --------------- --- ------------------- - --- -------------------- -------
在这个例子中,我们定义了一个 Person
类,并重写了它的 __repr__()
方法。当我们调用 repr()
函数时,它会返回我们定义的字符串表示形式。
内置类型的 repr()
表现
对于 Python 内置类型,repr()
通常会提供一种更精确或更全面的描述。例如:
- 对于整数,它会显示完整的数值。
- 对于浮点数,它可能会显示更多的小数位。
- 对于列表、元组等集合类型,它会显示每个元素及其类型。
示例
integer = 1234567890 floating_point = 3.141592653589793 list_example = [1, 'hello', True] print(repr(integer)) # 输出: 1234567890 print(repr(floating_point)) # 输出: 3.141592653589793 print(repr(list_example)) # 输出: "[1, 'hello', True]"
repr()
与 str()
的区别
虽然 str()
和 repr()
都是将对象转换为字符串的方法,但它们的目的和使用场景不同。
str()
: 主要用于生成对象的用户友好型字符串表示,适合打印和显示。repr()
: 目的是生成对象的机器可读表示,主要用于调试和日志记录。
示例
-- -------------------- ---- ------- ----- ------------- --- -------------- ------- ---------- - ----- --- -------------- ------ ----------------------------------- --- --------------- ------ ----------------------------- ------- - ---------------- ------------------- - --- ---------------------- -------------------- - --- ----------------
在这个例子中,str()
返回一个更加描述性的字符串,而 repr()
则是一个更简洁的表示形式。
自定义类中的 __repr__()
方法
当你自定义类时,可以通过实现 __repr__()
方法来控制其在被 repr()
调用时的表现。这有助于确保你的类能够以一种清晰且一致的方式展示其状态。
示例
-- -------------------- ---- ------- ----- ---------- --- -------------- ------ -------- ---------- - ----- ----------- - ------ --- ----------- ------ ---------- - ----------- --- --------------- ------ ------------------------------- ---------------------- --------- - ------------ --- ---------------------- - --- ------------------ ----------
在这个例子中,我们定义了一个 Rectangle
类,并实现了 __repr__()
方法。这样,当我们使用 repr()
函数时,就能得到一个清晰且详细的表示。
总结
repr()
函数是 Python 中一个强大的工具,用于生成对象的正式字符串表示形式。了解如何正确使用它可以帮助你更好地进行调试和日志记录。同时,学会如何自定义类的 __repr__()
方法,可以使你的代码更具可读性和可维护性。