看了一些网上的解释,最主流的解释是“str是给人看的,repr是给机器看的”,如果已经理解了的,这句话是对的,但是是有问题的,对于没懂的,这句话是无法理解的。
我来尝试解释一下。先直译一下官方文档:
repr
(object)
Return a string containing a printable representation of an object. For many types, this function makes an attempt to return a string that would yield an object with the same value when passed to eval()
, otherwise the representation is a string enclosed in angle brackets that contains the name of the type of the object together with additional information often including the name and address of the object. A class can control what this function returns for its instances by defining a __repr__()
method.
返回一个字符串,这个字符串包含了一个对象的可打印表示。对于很多类型来讲,这个函数试图返回一个对象的字符串,这个字符串传入eval()以后返回的值,与这个对象相等,除非这个“表示”是那种被角括号包围的、包含了对象的类型名称的、还有一些附加信息通常是对象的地址和名称的字符串。一个类可以通过定义__repr__()方法来控制这个函数的返回值。
python是个尽量实现用户友好的语言,尽量让它简单简单再简单,尽量让它不出错,无论怎样搞都有结果,而且那结果是用户常用的。
使用C、C++、Java、C#、PHP等语言的人,基本上没有例外,都是程序猿、开发者,多少了解一些计算机的底层知识和原理,知道类、地址、变量等等,我们称之为开发者。而使用python的,还有另一类人,他们不是计算机科班,也不是搞开发的,他们是数据科学家、数据分析师、人工智能研究者等等,他们的专业可能是数学、物理、心理学、统计学、文学等等,他们可能不了解计算机底层知识(也不需要了解),他们只是使用一种工具,我们称之为用户。打个比方,如果我的目的是去另外一个城市,我可以选择开车、坐汽车、火车、飞机、轮船等等交通工具,C、C++、Java、C#、PHP这些就是开车,而python,就是坐火车(还不能比作飞机,它有点慢),只要买张到到目的地的票,剩下的事情不用管了,我不需要知道怎样启动火车怎样加速怎样刹车。而Java等语言,需要知道。所以Java等是开发者友好的,而python是用户友好的。这也是为什么近些年来随着数据量的增大网络传输速度的增加,python越来越火的原因,因为它简单。
说了这么多的目的就是为了说明,str是面向用户的,给用户展示的是结果,repr是面向开发者的,展示的是更详细的描述。一个是结果,一个是描述,如果你想知道得更多,请用repr。
下面是引用的文章中的例子,很能说明问题:
>>> class A: pass >>> a1 = A() >>> a1 <__main__.A object at 0x000000000302C358> >>> print(a1) <__main__.A object at 0x000000000302C358> >>> class A: def __str__(self): #__str__使用:被打印的时候需要以字符串的形式输出的时候,就会找到这个方法,并将返回值打印出来 return "我是一个字符串" #要想显示对象的属性,可以(1)return 后加上你想要格式化输出的属性,比如: return "%d %s" % (int("123"), str(123)) #(2)利用字符串的format方法,比如:"{},{}".format(1,2) >>> a1 = A() >>> a1 <__main__.A object at 0x00000000033712E8> >>> print(a1) >>> import datetime >>> today = datetime.datetime.now() >>> str(today) ‘2012-03-14 09:21:58.130922‘ >>> repr(today) ‘datetime.datetime(2012, 3, 14, 9, 21, 58, 130922)‘ --------------------- 作者:在到处之间找我 来源:CSDN 原文:https://blog.csdn.net/sinat_41104353/article/details/79254149 版权声明:本文为博主原创文章,转载请附上博文链接!
这个解释还是蛮靠谱的。
https://blog.csdn.net/sinat_41104353/article/details/79254149#%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A3
原文地址:https://www.cnblogs.com/Sabre/p/10226984.html