python repr 和 str 区别

举报
福州司马懿 发表于 2025/02/23 21:51:47 2025/02/23
51 0 0
【摘要】 在Python中,repr() 和 str() 是两个内置函数,它们都用于将对象转换为字符串表示,但它们的用途和输出格式有所不同。 str() 函数str() 函数的主要目的是返回一个对象的“非正式”或“可打印”的字符串表示。这个表示通常是为了人类阅读而设计的,它应该是一个有效的Python表达式(尽管不一定能够重新创建原始对象),但更重要的是,它应该是易于理解的。对于大多数内置类型,str...

在Python中,repr()str() 是两个内置函数,它们都用于将对象转换为字符串表示,但它们的用途和输出格式有所不同。

str() 函数

  • str() 函数的主要目的是返回一个对象的“非正式”或“可打印”的字符串表示。
  • 这个表示通常是为了人类阅读而设计的,它应该是一个有效的Python表达式(尽管不一定能够重新创建原始对象),但更重要的是,它应该是易于理解的。
  • 对于大多数内置类型,str() 的输出是尽可能简洁和易读的。

repr() 函数

  • repr() 函数返回一个对象的“正式”字符串表示,也称为“官方”字符串表示。
  • 这个表示的目的是尽可能准确地表示对象,以便它可以被重新解析回原来的对象(如果可能的话)。
  • repr() 的输出通常比 str() 更详细,更冗长,并且包含更多的信息,比如引号、转义字符等。
  • 对于内置类型,repr() 的输出通常是一个有效的Python表达式,如果可能的话,它应该能够重新创建原始对象。

示例

x = 10
print(str(x))  # 输出: '10'
print(repr(x))  # 输出: '10'

s = 'Hello, world!'
print(str(s))  # 输出: 'Hello, world!'
print(repr(s))  # 输出: "'Hello, world!'",注意字符串被单引号包围了

l = [1, 2, 3, 'four']
print(str(l))  # 输出: '[1, 2, 3, "four"]',注意字符串元素被双引号包围了(在某些Python版本中可能不同)
print(repr(l))  # 输出: '[1, 2, 3, \'four\']',更详细地表示了列表的内容,包括字符串元素中的转义字符

使用场景

  • 当你需要一个适合人类阅读的字符串表示时,使用 str()
  • 当你需要一个尽可能准确的、可能用于调试或重新创建对象的字符串表示时,使用 repr()

注意事项

  • 对于自定义类,你可以通过重写 __str__()__repr__() 方法来控制 str()repr() 的输出。
  • 一般来说,__str__() 应该返回一个易于阅读的字符串,而 __repr__() 应该返回一个更详细、更准确的字符串,最好是一个有效的Python表达式。
  • 如果只重写了 __str__() 而没有重写 __repr__(),那么当尝试使用 repr() 时,Python会回退到使用 __str__() 的输出(但会加上引号),这通常不是你所期望的。因此,最好同时重写这两个方法。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。