str()函数和repr()函数,都是Python内置的标准函数。这两个函数都是根据参数对象返回一个字符串,但是又有一些不一样的地方。我们在使用的时候,常常搞混,倾向于使用简单明了的str()函数,而搞不清楚为什么还有一个不知所云的repr()函数。本文对此进行介绍。

str()和repr()的相同之处

str()和repr(),都是返回一个字符串出来,这个字符串,来自它们的参数。

以上的代码显示,前面都是相同的,都是返回相同的字符串。唯一不同的地方在最后4行,repr 函数返回的字符串,外面多了一对双引号(",后面解释原因)。

str()和repr()的差异

先来看有差异的一段示例代码:

>>> import datetime

>>> today = datetime.date.today()

>>> str(today)

'2019-08-09'

>>> repr(today)

'datetime.date(2019, 8, 9)'

对照上面有差异的示例代码,说明str()函数跟repr()函数的不同之处:

str()函数致力于为终端用户创造字符串输出,而repr()函数的返回字符串主要是用于软件开发的debugging和developement;

str()函数的返回字符串的目标的是可读性(readable),而repr()函数的返回的目标是准确和无歧义;

repr()函数返回的字符串是正式地(offcially)代表某个对象,而str()返回的字符串是非正式地;

str()函数调用的是对象的__str__()函数,repr()函数调用的是对象的__repr__()函数。

在Python官方文档中,对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.

这段英文解释了一个细节,有一些对象(主要是Python内置的几个,还不是所有的)的repr()函数返回值,可以直接给eval()函数用于创建此对象,这就是前面示例代码,repr函数的返回中,多了一对双引号的原因。上面的那个代码示例,我们继续多写几行来测试:

>>> today = eval(repr(today))

>>> today

datetime.date(2019, 8, 9)

这段解释还说,对于很多Python内置的对象而言,如果不能满足eval函数,repr函数就会返回一个字符串,前面是用三角括号围起来的对象类型信息,后面是一些额外的信息,通常包含对象的名称和地址等。因此,我们在try...except...结构中获取异常信息的时候,通常都是使用repr函数,而不是str函数。

对自定义类型使用str()和repr()函数

前面解释过了,str()函数调用的是对象的__str__()函数,repr()函数调用的是对象的__repr__()函数。所以,只要自定义类型有这两个函数的定义,就可以使用Python标准库中的这两个函数。

class Person:

def __init__(self, name):

self.name = name

def __str__(self):

return f'I am {self.name}'

def __repr__(self):

return f'{self.name}'

>>> from test import Person

>>> p1 = Person('xinlin')

>>> str(p1)

'I am xinlin'

>>> repr(p1)

'xinlin'

上面这段示例代码,先定义一个Person类,然后创建p1对象,再用str和repr函数去测试p1对象的返回值。

以上就是对str()函数和repr()函数异同的介绍!

-- EOF --

python的repr和str有什么不同_str()和repr()的异同相关推荐

  1. python的repr和str有什么不同_str和repr的区别?

    Alex总结得不错,但令人惊讶的是,过于简洁. 首先,让我重申一下Alex's post中的要点:默认的实现是无用的(很难想象有一个不是,但是是的) __repr__目标是明确的 __str__目标是 ...

  2. python中 str 和 repr_python repr()与str()区别总结

    python中,用于将某一类型的变量或者常量转换为字符串对象的方法有两种,即repr()和str().但是他们在定义.面向对象.返回处理方式.字符串处理和输出目的都有很大的不同,本文将做详细介绍. 1 ...

  3. repr与str和eval

    先来看几个列子 >>> a = "777" >>> repr(a) "'777'" >>> eval(re ...

  4. Python报错TypeError: 'str' object is not callable

    原文:http://blog.sina.com.cn/s/blog_71f3890901017rsh.html Python报错TypeError: 'str' object is not calla ...

  5. python报错:TypeError: 'str' object is not callable

    这个问题遇到好多次了,这次记录一下, 问题重现 代码仅保留最重要的: # summaries 是一个集合 # 求和并打印 result = 0 for str in summaries: result ...

  6. python抢券代码_京东python抢券脚本Python内置函数——str

    www.002pc.com对<京东python抢券脚本Python内置函数--str>总结来说,为我们学习Python很实用. str[code]str([object]) 转换为stri ...

  7. python系列之:str、byte、hex相互转换

    python系列之:str.byte相互转换 一.byte转化为str 二.str转化为byte 三.str.byte相互转换完整代码 四.byte转化hex 五.hex转化byte 六.byte.h ...

  8. python中json与str转换和出现KeyError的解决方法

    python中json与str转换和出现KeyError的解决方法 json转str str转json KeyError的解决方法 json转str json格式的数据其实就是dict类型的数据,如图 ...

  9. python元组(tuple)使用示例+常用方法+列表(list)和元组(tuple)的异同?

    python元组(tuple)使用示例+常用方法+列表(list)和元组(tuple)的异同? 元组(tuple) # 元组类似列表,元组里面的元素也是进行索引计算. # 列表里面的元素的值可以修改, ...

最新文章

  1. C# checked、unchecked操作符
  2. 深度学习静态图和静态图的区别以及优缺点是什么?
  3. 计算机三级数据库应用题设计题,2017年计算机三级《数据库技术》模拟应用题及答案...
  4. php k线 形态识别,趋势追踪,从设计交易系统开始(七)——形态识别,不只有K线...
  5. 家的味道,家的感觉!!!
  6. ajax jsp模糊查询源码,ajax模糊查询api
  7. 容器编排技术 -- Kubernetes 在 Namespace 中配置默认的CPU请求与限额
  8. java日志记录的5条规则
  9. 修改ASM磁盘组冗余模式(一):copy-switch方式
  10. delphi html转为图片,Delphi转换Word为HTML文件或其它类型文件的总结
  11. 【珍藏】 2012Android开发热门资料(110个)
  12. 国际电话号码标准格式
  13. 双网卡上网冲突解决_【优特普.安防百科】交换机组网最常见的8大故障及解决方式...
  14. 万国数据二季度调整后EBITDA利润率43.5% 高于指引预测
  15. An invalid domain [] was specified for this cookie问题解决
  16. 《鹿鼎记》中归家三侠击杀的是真太后还是假太后
  17. 2023兰州理工大学计算机考研信息汇总
  18. 多分类问题OvO,OvR,MvM
  19. 成为一个有目标的学习者
  20. .NET 5.0 正式版发布了!

热门文章

  1. Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 1
  2. wireshark网卡权限_网络分析系列之六_Wireshark安装
  3. oracle组合数据类型,oracle复合数据类型-相关方法
  4. 听课评课记录计算机应用,教师听课的评语(精选10篇)
  5. js禁止鼠标滑轮_js实现鼠标滑动到某个div禁止滚动
  6. python 读取 Excel 文件的方法 csv.reader
  7. c#补充print(多态性问题)【C#】
  8. 优雅的redux异步中间件 redux-effect
  9. kafka清理数据日志
  10. 中国制造2025变革,背后的大数据来龙去脉