Python中str()与repr()函数的区别

作者: 叶俊贤 | 来源:发表于2017-04-22 16:14 被阅读1492次

在 Python 中要将某一类型的变量或者常量转换为字符串对象通常有两种方法,即 str() 或者 repr()

>>> a = 10
>>> type(str(a))
<class 'str'>
>>> type(repr(a))
<class 'str'>

但是这二者之间有什么区别呢?因为提供两个功能完全相同的内建函数是没有意义的。先看一个例子。

>>> print(str('123'))       
123                         
>>> print(str(123))         
123                         
>>> print(repr('123'))      
'123'                       
>>> print(repr(123))        
123                         

从例子中不难发现,当我们把一个字符串传给 str() 函数再打印到终端的时候,输出的字符不带引号。而将一个字符串传给 repr() 函数再打印到终端的时候,输出的字符带有引号。

造成这两种输出形式不同的原因在于:

  • print 语句结合 str() 函数实际上是调用了对象的 __str__ 方法来输出结果。而 print 结合 repr() 实际上是调用对象的 __repr__ 方法输出结果。下例中我们用 str 对象直接调用这两个方法,输出结果的形式与前一个例子保持一致。
>>> print('123'.__repr__())
'123'
>>> print('123'.__str__())
123

不过这个例子可能还是无法很好表达到底 str()repr() 各有什么意义,我们再来看一个例子。

>>> from datetime import datetime
>>> now = datetime.now()
>>> print(str(now))
2017-04-22 15:41:33.012917
>>> print(repr(now))
datetime.datetime(2017, 4, 22, 15, 41, 33, 12917)

通过 str() 的输出结果我们能很好地知道 now 实例的内容,但是却丢失了 now 实例的数据类型信息。而通过 repr() 的输出结果我们不仅能获得 now 实例的内容,还能知道 nowdatetime.datetime 对象的实例。

因此 str()repr() 的不同在于:

  • str() 的输出追求可读性,输出格式要便于理解,适合用于输出内容到用户终端。
  • repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用。

另外如果想要自定义类的实例能够被 str()repr() 所调用,那么就需要在自定义类中重载 __str____repr__ 方法。

相关文章

  • python中str和repr有什么区别?

    python中str和repr有什么区别?下面给大家详细介绍: 1、内建函数str()和repr() 或反引号操作...

  • Python中str()与repr()函数的区别

    在 Python 中要将某一类型的变量或者常量转换为字符串对象通常有两种方法,即 str() 或者 repr() ...

  • Python Day37

    python大大的图 str()&repr() 函数str() 用于将值转化为适于人阅读的形式,而repr()...

  • Python 输入输出

    str和repr内置函数 在介绍Python的输入输出之前,我们先来介绍两个内置函数,str()和repr(),它...

  • Python中__repr__和__str__区别

    Python中repr和str区别 原创 2016年12月14日 23:21:25 标签: python 看下面的...

  • python 定制类

    python 中可以使用一些函数,对类进行定制,方便我们的使用。 比如slots函数、str函数、repr函数。。...

  • Python中str()、repr()、``的区别

    str()函数和repr()函数都是将任意数据类型转换为字符类型,但是它们之间又有一些区别,网上以及一些书籍上大多...

  • 2020-05-10

    1.repr与str区别: 2.isinstance() 函数 3.call实例: 4.bool与len: 5.d...

  • str()与 repr()区别

    尽管str(),repr()和运算在特性和功能方面都非常相似,事实上repr()和做的是完全一样的事情,它们返回的...

  • Python中str()与repr()、__str__()与__

    带双下划线 与 不带双下划线 的区别 带双下划线,属于方法的定义;一般定义在类里面。不带双下划线,属于方法的调用;...

网友评论

    本文标题:Python中str()与repr()函数的区别

    本文链接:https://www.haomeiwen.com/subject/fupszttx.html