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

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

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python,类的特殊方法`__repr__`和`__str__`都是用来返回对象的字符串表示形式,但是它们的用途和输出方式略有不同。 `__repr__`方法的作用是返回一个对象的“官方”字符串表示形式,通常包含足够的信息以便于重建该对象。在交互式环境,直接输入对象名称并执行时,会自动调用该对象的`__repr__`方法。例如: ```python class Person: def __init__(self, name, age): self.name = name self.age = age def __repr__(self): return f"Person('{self.name}', {self.age})" p = Person('Alice', 25) print(p) # 输出:Person('Alice', 25) ``` `__str__`方法的作用是返回一个对象的可读性较好的字符串表示形式,通常用于打印输出和显示给用户看。当使用`str()`函数或者`print()`函数输出一个对象时,会自动调用该对象的`__str__`方法。例如: ```python class Person: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return f"{self.name} is {self.age} years old" p = Person('Alice', 25) print(p) # 输出:Alice is 25 years old ``` 需要注意的是,如果一个对象没有定义`__str__`方法,但是定义了`__repr__`方法,则在使用`str()`函数或者`print()`函数输出该对象时,会默认使用`__repr__`方法返回的字符串表示形式。反之亦然,如果一个对象没有定义`__repr__`方法,则在交互式环境直接输入该对象名称并执行时,会默认使用`__str__`方法返回的字符串表示形式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值