📜  Python中的str()vs repr()

📅  最后修改于: 2020-04-07 11:12:32             🧑  作者: Mango

str()和repr()都用于获取对象的字符串表示形式。

  1. str()的示例:
    s = '你好, 芒果.'
    print str(s)
    print str(2.0/11.0)

    输出:

    你好, 芒果.
    0.181818181818

    2, repr()的示例: 

    s = '你好, 芒果.'
    print repr(s)
    print repr(2.0/11.0)

    输出: 

    '你好, 芒果.'
    0.18181818181818182

    从上面的输出中,我们可以看到是否使用repr()函数打印字符串,然后使用一对引号打印字符串,如果我们计算一个值,则得到的值比str()函数更精确。
    以下是区别:

    • str()用于为最终用户创建输出,而repr()主要用于调试和开发。例如,如果我们怀疑浮点数的舍入误差较小,则repr将向我们显示,而str则可能没有。
    • repr()计算对象的“正式”字符串表示形式(具有有关对象的所有信息的表示形式),而str()用于计算对象的“非正式”字符串表示形式(对于打印宾语)。
    • print语句和str()内置函数使用__str__来显示对象的字符串表示形式,而repr()内置函数使用__repr__来显示对象。

    让我们通过一个例子来理解这一点:

    import datetime
    today = datetime.datetime.now()
    # 打印时间对象的可读形式
    print str(today)
    # 打印date-time对象的正是形式
    print repr(today)

    输出:

    2016-02-22 19:32:04.078030
    datetime.datetime(2016,2,22,19,32,4,78030)

    str()以用户可以理解日期和时间的方式显示今天的日期。
    repr()打印日期时间对象的“正式”表示形式(意味着使用“官方”字符串表示形式,我们可以重构该对象)。

    如何使它们适用于我们自己定义的类?
    如果我们需要调试的详细信息,则用户定义的类也应具有__repr__。而且,如果我们认为为用户提供字符串版本会很有用,则可以创建__str__函数。

    # Python程序展示__repr__ 和__str__
    # 一个用户定义的类
    class Complex:
        # 构造函数
        def __init__(self, real, imag):
           self.real = real
           self.imag = imag
        # 若调用repr(). 打印对象信息
        def __repr__(self):
           return 'Rational(%s, %s)' % (self.real, self.imag)
        # 若调用str(). 打印可读形式
        def __str__(self):
           return '%s + i%s' % (self.real, self.imag)
    # 测试代码
    t = Complex(10, 20)
    print str(t)  # Same as "print t"
    print repr(t)

    输出:

    10 + i20
    Rational(10, 20)