看了一些网上的解释,最主流的解释是“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

python中的str和repr函数的区别的更多相关文章

  1. Python中str()与repr()函数的区别——repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用

    Python中str()与repr()函数的区别 from:https://www.jianshu.com/p/2a41315ca47e 在 Python 中要将某一类型的变量或者常量转换为字符串对象 ...

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

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

  3. Python中str()和repr()函数的区别

    在 Python 中要将某一类型的变量或者常量转换为字符串对象通常有两种方法,即 str() 或者 repr() . 区别与使用函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供 ...

  4. python中,str和repr的区别

    str函数,它会把值转换为合理形式的字符串,以便用户可以理解. repr会创建一个字符串,它以合法的Python表达式的形式来表示值. 例如: >>> print repr(&quo ...

  5. python中的str()与eval函数

    author:headsen chen   date:2018-04-09   10:48:22 eval函数是把str转化成list.dict.tuple str函数把list,dict,tuple ...

  6. python中staticmethod classmethod及普通函数的区别

    staticmethod 基本上和一个全局函数差不多,只不过可以通过类或类的实例对象 (python里光说对象总是容易产生混淆, 因为什么都是对象,包括类,而实际上 类实例对象才是对应静态语言中所谓对 ...

  7. python中的str.strip()的用法

    python中字符串str的strip()方法 str.strip()就是把字符串(str)的头和尾的空格,以及位于头尾的\n \t之类给删掉. 例1:str=" ABC"prin ...

  8. Python中的str与unicode处理方法

    Python中的str与unicode处理方法 2015/03/25 · 基础知识 · 3 评论· Python 分享到:42 原文出处: liuaiqi627 的博客    python2.x中处理 ...

  9. Python中的__init__()和__call__()函数

    Python中的__init__()和__call__()函数 在Python的class中有一些函数往往具有特殊的意义.__init__()和__call__()就是class很有用的两类特殊的函数 ...

随机推荐

  1. window7开启Administrator账户

    需求描述: 在工作遇见,安装部分软件,对目录不具有写权限.为了彻底解决问题.启用Administrator账户! 问题解决: 激活Administrator账户,并设置密码 重启系统,用Adminis ...

  2. MySQL 四种事务隔离级的说明[转]

    很早之前写的文章,重新回顾和学习下: 按照SQL:1992 事务隔离级别,InnoDB默认是可重复读的(REPEATABLE READ).MySQL/InnoDB 提供SQL标准所描述的所有四个事务隔 ...

  3. aaronyang的百度地图API之LBS云[把数据丰富显示1/3]

    中国的IT 需要无私分享和贡献的人,一起努力 本篇博客来自地址:http://www.cnblogs.com/AaronYang/p/3673933.html,请支持原创,未经允许不许转载 一.第一步 ...

  4. Effective Java 第三版——58. for-each循环优于传统for循环

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  5. iOS画折线图

    代码例子效果:  下载地址:http://download.csdn.net/detail/qqmcy/6983187 LineChartViewDemo.h #import <UIKit/UI ...

  6. [转]protoc-gen-lua 编译、安装、使用教程

    版权声明:本文转自http://blog.csdn.net/huutu 转载请带上 http://www.liveslives.com/ https://blog.csdn.net/cp7906216 ...

  7. HyperLogLog

    数据量一大,连统计基数也成了一个麻烦事.在使用kylin的时候,遇到对度量值进行基数统计,使用的是Hyperloglog算法,占用内存小,误差小,实乃不错的方法,但查阅网上的资料与内容,感觉未能理解的 ...

  8. linux 常用命令1【转】

    1.1. 关机 shutdown -h now 关闭系统(1) init 0 关闭系统(2) telinit 0 关闭系统(3) shutdown -h hours:minutes & 按预定 ...

  9. javascript 简略

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Sass的安装(windows 10)

    1.下载ruby 下载地址:https://rubyinstaller.org/downloads/ 如果觉得下载速度过慢,可以在我的百度去下载: 链接:https://pan.baidu.com/s ...