Python中关于str()函数和repr()函数的那些事

相信很多小伙伴跟我一样,对于Python中的str函数和repr函数,有很多地方都是很不解,博主也是这样,于是决定从最开始的文档,然后一个一个print去看结果然后,就这样一直print,print总算是大致上理解其区别,话不多少直接上例子。

Python中的str( )和repr( )两个函数的区别,都是可以将任意的值转化为字符串:函数str( )将其转化成为适于人阅读的形式,而repr(object)就是转换成为阅读器阅读的形式, 返回一个可以用来表示对象的可打印字符串,用eval( )函数还可以返回相应的对象,下面直接上例子来说明这两个函数的用法。

对于字符串: a = ‘hello, world!\n’

>>> a
'hello, world!\n'     #输出的a本来的模样
>>> print(a)          #对a经过加工后输出,将转义字符进行转义
hello,world!
>>> print(str(a))     #可以看到对str返回的值进行print处理,这将与直接print(a)得到相同的结果
hello,world!    
>>> repr(a)           #获得一种机器阅读的形式,也就是这个变量背地里是什么样子的。
"'hello, world!\n'"
>>> print(repr(a))    #对于repr返回的值进行print处理,可以看到这与直接在终端输入a,得到的是相同的结果
'hello,world!\n'

以上就是最基本的在字符串的显示中的使用,对应指令和输出结果及注释相信大家很容易都能看明白,接下来说一下这两个函数另外的作用。

在类中的使用,可以定义一些在实例运行时,控制repr()函数作用在其实例上时的行为。

class test(object):
     def __init__(self, data):
          self.data = data

仅仅是这样的话我们进行如下操作:

>>> t = test(100)
>>> t
<__main__.test at 0x4db85f8>
>>> print(t)
<__main__.test at 0x4db85f8>
>>> str(t)
'<__main__.test at 0x4db85f8>'
>>> repr(t)
'<__main__.test at 0x4db85f8>'

在类中没有方法的时候,如果直接在终端输入类的实例,不会输出任何东西的,上面显示的内容是由于类的特殊方法(基本定制型)有str()和repr(), 在print(object)和直接运行实例的时候回打印字符串。如果没有实现(覆盖)该函数,就会出现上面的结果。

那我们定义一个str函数来看看效果:

class test(object):
     def __init__(self, data):
          self.data = data
     def __str__(self):
          return "ss"

>>> t = test(100)
>>> t
<__main__.test at 0x4db85f8>
>>> str(t)
'ss'
>>>print(t)
ss
>>>repr(t)
<__main__.test at 0x4db85f8>

可以看到在这里直接输入t还会跟上面的例子的结果一致,但是str(t)和print(t)已经发生了改变,不难看出显示的是我们在类中定义的str()函数的返回值,而rerp(t)还是 跟上个例子一样,下面我们也来实现一个str()函数来看一看效果。


class test(object):
     def __init__(self, data):
          self.data = data
     def __str__(self):
          return "ss"
     def __repr__(self):
          return "gg"

>>> t = test(100)
>>> t
gg
>>> str(t)
'ss'
>>>print(t)
ss
>>>repr(t)
'gg'
>>> print(repr(t))
gg

好了,可以很清楚的明白,默认的str() repr()函数与重构后的区别,以及这两者与直接输入和经过print处理以后的关系了吧。
也就是直接在终端输入对象,相当于调用print(repr(oblect))函数,如果没有被复写则会出现上面最开始的那种显示形式;而print(object)函数相当于调用了print(str(object))这个函数,如果没有被复写就是使用的默认的,也会出现上面的显示结果。

下面还有一个对于repr( )函数的说明:
Python中这个repr函数,对应repr(object)这个函数,返回一个可以用来表示对象的可打印字符串:

1.尝试生成这样一个字符串,将其传给 eval()可重新生成同样的对象 ;
2.否则,生成用尖括号包住的字符串,包含类型名和额外的信息(比如地址) ;
3.一个类(class)可以通过 repr() 成员来控制repr()函数作用在其实例上时的行为。

Python中,有的操作符和函数是做同样的事情,原因是某些场合下函数会比操作符更适合使用,比如函数对象可作为参数传递。

希望我的文章能够帮到你,喜欢的可以点一波关注!!您的支持是博主坚持的动力~~~

猜你喜欢

转载自blog.csdn.net/WIinter_FDd/article/details/78063985