谈一谈Python中str()和repr()的区别

前言

在学习BeautifulSoup文档的时候发现了一个以前不常见的Python内建函数repr(),带着好奇对这个内建函数进行了一番搜索和学习。

总结

str()repr()都是Python的内建函数,通过它们可以方便地以字符串的方式获取对象的内容、类型、数值属性等信息。大多数情况下他们的效果相同,但是既然是不同的函数肯定有不同的地方,概括起来可以这样说str()会将对象转化为可读性较好的字符串,而repr()会将对象转化为供解释器读取形式的字符串。一个对象没有适于人阅读的解释形式的话,str()会返回与repr()相同的值。
其中,数值或list、tuple、字典等这样的结构,针对各种函数都有着统一的解读方式。而字符串不同函数可能有着不同的解读方式。

举例

  1. 在下列情况下两者效果相同:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    >>> str(123)
    '123'
    >>> repr(123)
    '123'
    >>> str((1, 2, 3, 4, 5))
    '(1, 2, 3, 4, 5)'
    >>> repr((1, 2, 3, 4, 5))
    '(1, 2, 3, 4, 5)'
    >>> str([1, 2, 3, 4, 5])
    '[1, 2, 3, 4, 5]'
    >>> repr([1, 2, 3, 4, 5])
    '[1, 2, 3, 4, 5]'
    >>> str({1: 2, 3: 4})
    '{1: 2, 3: 4}'
    >>> repr({1: 2, 3: 4})
    '{1: 2, 3: 4}'
    >>> str(4.53-2j)
    '(4.53-2j)'
    >>> repr(4.53-2j)
    '(4.53-2j)'
    >>> str(2e10)
    '20000000000.0'
    >>> repr(2e10)
    '20000000000.0'
  2. 下列情况两者效果出现差异:

    1
    2
    3
    4
    5
    6
    7
    8
    >>>hi = 'hello world\n Python'
    >>> hi
    'hello world\n Python'
    >>> print(str(hi))
    hello world
    Python
    >>> print(repr(hi))
    'hello world\n Python'
给我加个菜?