python str和repr的区别

原创 2015年11月19日 20:45:27

python str和repr的区别

如果你是一个初学者,那么:

尽管str(),repr()和``运算在特性和功能方面都非常相似,事实上repr()和``做的是完全一样的事情,它们返回的是一个对象的“官方”字符串表示,也就是说绝大多数情况下可以通过求值运算(使用内建函数eval())重新得到该对象。但str()则有所不同,str()致力于生成一个对象的可读性好的字符串表示,它的返回结果通常无法用于eval()求值,但很适合用于print语句输出。需要再次提醒的是,并不是所有repr()返回的字符串都能够用 eval()内建函数得到原来的对象。 也就是说 repr() 输出对 Python比较友好,而str()的输出对用户比较友好。 

来源:http://www.cnpythoner.com/post/251.html

如果你是一个比较专业的学者,那么请看:

无用的缺省实现

这一点令人非常惊奇,因为Python的缺省设置通常都相对比 __repr__的缺少实现表现为如下的代码:较有用。然而,在这种情况下,__repr__的缺少实现表现为如下的代码:

return"%s(%r)"%(self.__class__,self.__dict__)

这样是非常危险的(如果对象之前相互引用很容易地就进入无限递归)。所以Python不会起作用。注意有一个缺省实现的情况:如果定义了__repr__,但没有定义__str__,对象将表现为__str__=__repr__。

用简单的术语来说,这意味着:几乎你实现的所有对象都应该有一个用于理解对象的__repr__函数。实现__str__是可选的:如果你需要一个看起来较好的打印功能(比如用于产生报表).

__repr__的目标是准确性

直接了当地说,我不相信调试器。我并不确切知道如何使用任何调试器,也从来没有真正地使用过一个调试器。更进一步说,我相信调试器的大缺陷是它们的本质——我很久以前的调试发现绝大多数的失败都距真正的错误发生点很远。这使我对日志具有宗教般的热情。日志是一个正规的火灾和备份服务器系统的生命线。Python使得日志非常便于记录:利用某些项目特定的封装,你需要做的只是如下操作:

log(INFO,"I am in the weird function and a is",a,"and",b,"is",b,"but I got a null C — using default",default_c)

但你还有最后一步需要做——确定你的每一个对象都实现了一个可用的repr函数,以使那样的代码可用。这也是"eval"出现的原因:如果你有足够的信息,所以eval(repr(c))==c就表明你知道所有的信息,因此知道c。如果那个太简单,但有点令人糊涂,请试着做一下。如果没有任何问题,那么请确定你有c的所有信息。我通常使用类eval的格式:"MyClass(this=%r, that=%r)" % (self.this, self.that)。这并不是说你能准确地构建MyClass,或那是正确的构造参数——但对于解释“这是你需要知道的关于这个实例的所有信息”是非常有用的。

注意,在上面我使用了%r而不是%s。你总是想在__repr__实现中用repr()[或者用与相同的%r格式字符串],或都你不管repr的准确性目标。你只是想能够区分MyClass(3)和MyClass("3")

__str__的目标是可读性

特别说明它不特别在意准确性——注意str(3)==str("3")。类似的,你实现了一个IP地址的抽象,它很好地实现了类似192.168.1.1的str。当实现一个日期/时间抽象,str可能是“2010/4/12 15:35:22”,等等。它的目标是实现了一种使用户而不是程序员能够方便阅读的方式。去掉无用的数字,然后伪装成其它的类——只要它支持可读性,就是一种改进。 

来源:http://www.oschina.net/translate/difference-between-str-and-repr-in-python

 

 

版权声明: Free Open Share

str和repr的区别

Python打印值的时候会保持该值在Python代码中的状态,不是用户所希望看到的状态。而使用print打印值则不一样,print打印出来的值是用户所希望看到的状态。 例如:>>> "Hello, ...
  • u013961718
  • u013961718
  • 2016年04月08日 22:45
  • 10330

Python--str与repr以及eval的使用方法

之前自己也学过一些Python,但是由于后来并没有使用Python做一些练习,加上自己还是比较喜欢C语言,所以有些生疏了。想要重新开始进行Python的学习,在runoob.com学习Python数据...
  • Miss_yan
  • Miss_yan
  • 2017年05月26日 15:49
  • 762

【ZZ】python - __str__ 和 __repr__

详细页面:http://www.verydemo.com/demo_c122_i31216.html 【http://blog.csdn.net/followingturing/article/...
  • yz16808334330
  • yz16808334330
  • 2014年05月23日 12:31
  • 220

python str和repr的区别

python str和repr的区别 如果你是一个初学者,那么: 尽管str(),repr()和``运算在特性和功能方面都非常相似,事实上repr()和``做的是完全一样的事情,它们返回的是一个对象的...
  • IT_DREAM_ER
  • IT_DREAM_ER
  • 2015年11月19日 20:45
  • 475

python的str()和repr()的区别

str()一般是将数值转成字符串。 repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思。如list,dict使用str()是无效的,但使用repr可以,这是为...
  • longshenlmj
  • longshenlmj
  • 2013年07月24日 15:05
  • 8928

[python]python中str()与repr()的区别与联系

搜了好些博文,说了有一堆废话,也没几个讲清楚python中str()与repr()的区别与联系,于是写此文。首先,上英文原文The str() function is meant to return ...
  • ysgjiangsu
  • ysgjiangsu
  • 2017年07月18日 13:43
  • 354

python str和repr的区别

 尽管str(),repr()和``运算在特性和功能方面都非常相似,事实上repr()和``做的是完全一样的事情,它们返回的是一个对象的“官方”字符串表示,也就是说绝大多数情况下可以通过求值运算...
  • midion9
  • midion9
  • 2016年05月06日 06:52
  • 201

python-str()和 repr()

内建函数 str() 和 repr() 或反引号运算符(``) 可以方便的以字符串的方式获取对象的内容、类型、数值属性等信息。str()函数得到的字符串可读性好, 而 repr()函数得到的字符 串...
  • ztejiagn
  • ztejiagn
  • 2013年04月02日 15:08
  • 481

str()和repr()(及''操作符)以及python对json的简单操作

str(),epr()和''运算在特性和功能方面相似,事实上repr()和''做的是完全一样的事情(函数和操作符做同样一件事,是因为在有的场合函数会比操作符更合适),它们返回的是一个对象的“官方”字符...
  • razy_Monkey
  • razy_Monkey
  • 2016年07月28日 22:23
  • 886

Python中str()与__str__、repr()与__repr__、eval()、__unicode__的关系与区别

首先先弄清楚str()与__str__、repr()与__repr__ 的区别,str()与repr()都是python中的内置函数,是直接用来格式化字符串的函数。而__str__与__repr__ ...
  • foryouslgme
  • foryouslgme
  • 2016年06月13日 15:26
  • 1988
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python str和repr的区别
举报原因:
原因补充:

(最多只允许输入30个字)