博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python中str()与__str__、repr()与__repr__、eval()、__unicode__的关系与区别
阅读量:6101 次
发布时间:2019-06-20

本文共 2891 字,大约阅读时间需要 9 分钟。

 

原创 2016年06月13日 15:26:19

这里写图片描述

首先

先弄清楚str()与__str__、repr()与__repr__ 的区别,str()与repr()都是python中的内置函数,是直接用来格式化字符串的函数。而__str__与__repr__ 是在类(对象)中对类(对象)本身进行字符串处理。

其次

需要弄清楚str与repr之间的区别【引用】

python3

>>> help(str)Help on class str in module builtins:class str(object) | str(object='') -> str | str(bytes_or_buffer[, encoding[, errors]]) -> str | | Create a new string object from the given object. If encoding or | errors is specified, then the object must expose a data buffer | that will be decoded using the given encoding and error handler. | Otherwise, returns the result of object.__str__() (if defined) | or repr(object). | encoding defaults to sys.getdefaultencoding(). | errors defaults to 'strict'.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

python2

class str(basestring) |  str(object='') -> string |   |  Return a nice string representation of the object. | If the argument is a string, the return value is the same object.
  • 1
  • 2
  • 3
  • 4
  • 5

str【引用】

返回一个可以用来表示对象的可打印的友好的字符串

对字符串,返回本身。 

没有参数,则返回空字符串 
对类,可通过__str__() 成员控制其行为。该成员不存在,则使用其 __repr__() 成员。

与 repr 区别:不总是尝试生成一个传给 eval 的字符串,其目标是可打印字符串。

python3

>>> help(repr)Help on built-in function repr in module builtins: repr(obj, /) Return the canonical string representation of the object. For many object types, including most builtins, eval(repr(obj)) == obj.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

python2

repr(...)    repr(object) -> string    Return the canonical string representation of the object. For most object types, eval(repr(object)) == object.
  • 1
  • 2
  • 3
  • 4
  • 5

repr【引用】

返回一个可以用来表示对象的可打印字符串

首先,尝试生成这样一个字符串,将其传给 eval()可重新生成同样的对象 

否则,生成用尖括号包住的字符串,包含类型名和额外的信息(比如地址) 
一个类(class)可以通过 __repr__() 成员来控制repr()函数作用在其实例上时的行为。

class a():    def __unicode__(self): pass def __str__(self): pass def __repr__(self): pass
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
>>> help(eval)Help on built-in function eval in module builtins: eval(source, globals=None, locals=None, /) Evaluate the given source in the context of globals and locals. The source may be a string representing a Python expression or a code object as returned by compile(). The globals must be a dictionary and locals can be any mapping, defaulting to the current globals and locals. If only globals is given, locals defaults to it.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
>>> eval('1+2')3>>> str('1+2')'1+2'>>> repr('1+2') "'1+2'" >>> type(repr('1+2')) 
>>> type(str('1+2'))
>>> type(eval('1+2'))
#就相当于上面说的eval(repr(object)) == object >>> eval(repr('1+2')) '1+2' >>> '1+2' '1+2'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

示例

#test2.pyclass A(object): def __str__(self): return "__str__" def __repr__(self): return "__repr__" a = A() b = A
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
>>> import test2>>> test2.a__repr__>>> print(test2.a)__str__>>> test2.b
>>> print(test2.b)
转载:http://blog.csdn.net/foryouslgme/article/details/51658057

转载于:https://www.cnblogs.com/chenyang13677/p/7921677.html

你可能感兴趣的文章
Oracle表分区
查看>>
centos 下安装g++
查看>>
嵌入式,代码调试----GDB扫盲
查看>>
类斐波那契数列的奇妙性质
查看>>
配置设置[Django]引入模版之后报错Requested setting TEMPLATE_DEBUG, but settings are not configured....
查看>>
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>
Wait Functions
查看>>
代码描述10313 - Pay the Price
查看>>
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
vb sendmessage 详解1
查看>>
jquery用法大全
查看>>
Groonga 3.0.8 发布,全文搜索引擎
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
网卡驱动程序之框架(一)
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>