看了一些网上的解释,最主流的解释是“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. git+gitolite如何实现权限控制

    前言 首先说明一下,这还是本人第一次写这类文章,如有不妥,多多见谅. 基本情况 因为现在公司的人不是很多,但是还对代码有着严格的管控,所以采用了gitolite的管理方式 其实正常来讲,这种权限的把控 ...

  2. LaTeX :font size 修改字体大小的几种方式

    调整字体大小的几种方式,大小依次增大,具体如下: \tiny \scriptsize \footnotesize \small \normalsize \large \Large \LARGE \hu ...

  3. primary库新增数据文件后,standby库无法创建文件并终止数据同步

    主库是RAC环境,使用asm存放数据文件,备库是操作系统本地文件系统存放数据文件.在主库执行以下操作: SQL> alter tablespace ysdv add datafile '+dat ...

  4. SNF开发平台WinForm-平板拍照及扫描二维码功能

    在我们做项目的时候,经常会有移动平板处理检验,审核等,方便移动办公.这时就需要在现场拍照上传问题,把当场问题进行上传,也有已经拍完照的图片或加工过的图片进行上传.还有在车间现场一体机,工控机 这种产物 ...

  5. MySQL-8.0.x 新特性之索引页合并

    [背景] 索引的重要是在些不表.在这里我想说的另一个问题:索引和数据一样在innodb中都是以page的形式来组织的,那么问题就来了. 比如果说索引 ix_person_name 的内容只要8个页面就 ...

  6. 每日英语:Doc, Do I Need A Juice Cleanse?

    Some drink only vegetable juice. Others soak in Epsom salts. It's all in the pursuit of ridding the ...

  7. 配置Django

    第一步,安装Python,在这里下载,如果你安装在C:\Python27, 把C:\Python27;C:\Python27\Scripts;C:\Python27\Lib 加到你的Path 第二步: ...

  8. [ModemManger]ModemManger的取消

    http://www.linux-databook.info/?page_id=3748 systemctl disable ModemManager.service 失能ModemManger从而取 ...

  9. Go Revel - Jobs(任务调度模块)

    revel提供了一个框架用于脱离请求流程的执行异步任务,一般用来执行经常运行的任务.更新缓存数据或发送邮件等. ##启用 该框架作为一个可选的revel模块,默认并不启用.需要更改应用配置来启用它: ...

  10. AllPay(欧付宝)支付接口集成

    AllPay,http://www.allpay.com.tw/,欧付宝是台湾知名的第三方支付公司,拥有丰富的支付模式(支持和支付宝.财付通),只需要一次对接,各种支付模式均可使用. 接口编写SDK: ...