python的repr和str有什么不同_str()和repr()的异同
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()的异同相关推荐
- python的repr和str有什么不同_str和repr的区别?
Alex总结得不错,但令人惊讶的是,过于简洁. 首先,让我重申一下Alex's post中的要点:默认的实现是无用的(很难想象有一个不是,但是是的) __repr__目标是明确的 __str__目标是 ...
- python中 str 和 repr_python repr()与str()区别总结
python中,用于将某一类型的变量或者常量转换为字符串对象的方法有两种,即repr()和str().但是他们在定义.面向对象.返回处理方式.字符串处理和输出目的都有很大的不同,本文将做详细介绍. 1 ...
- repr与str和eval
先来看几个列子 >>> a = "777" >>> repr(a) "'777'" >>> eval(re ...
- Python报错TypeError: 'str' object is not callable
原文:http://blog.sina.com.cn/s/blog_71f3890901017rsh.html Python报错TypeError: 'str' object is not calla ...
- python报错:TypeError: 'str' object is not callable
这个问题遇到好多次了,这次记录一下, 问题重现 代码仅保留最重要的: # summaries 是一个集合 # 求和并打印 result = 0 for str in summaries: result ...
- python抢券代码_京东python抢券脚本Python内置函数——str
www.002pc.com对<京东python抢券脚本Python内置函数--str>总结来说,为我们学习Python很实用. str[code]str([object]) 转换为stri ...
- python系列之:str、byte、hex相互转换
python系列之:str.byte相互转换 一.byte转化为str 二.str转化为byte 三.str.byte相互转换完整代码 四.byte转化hex 五.hex转化byte 六.byte.h ...
- python中json与str转换和出现KeyError的解决方法
python中json与str转换和出现KeyError的解决方法 json转str str转json KeyError的解决方法 json转str json格式的数据其实就是dict类型的数据,如图 ...
- python元组(tuple)使用示例+常用方法+列表(list)和元组(tuple)的异同?
python元组(tuple)使用示例+常用方法+列表(list)和元组(tuple)的异同? 元组(tuple) # 元组类似列表,元组里面的元素也是进行索引计算. # 列表里面的元素的值可以修改, ...
最新文章
- C# checked、unchecked操作符
- 深度学习静态图和静态图的区别以及优缺点是什么?
- 计算机三级数据库应用题设计题,2017年计算机三级《数据库技术》模拟应用题及答案...
- php k线 形态识别,趋势追踪,从设计交易系统开始(七)——形态识别,不只有K线...
- 家的味道,家的感觉!!!
- ajax jsp模糊查询源码,ajax模糊查询api
- 容器编排技术 -- Kubernetes 在 Namespace 中配置默认的CPU请求与限额
- java日志记录的5条规则
- 修改ASM磁盘组冗余模式(一):copy-switch方式
- delphi html转为图片,Delphi转换Word为HTML文件或其它类型文件的总结
- 【珍藏】 2012Android开发热门资料(110个)
- 国际电话号码标准格式
- 双网卡上网冲突解决_【优特普.安防百科】交换机组网最常见的8大故障及解决方式...
- 万国数据二季度调整后EBITDA利润率43.5% 高于指引预测
- An invalid domain [] was specified for this cookie问题解决
- 《鹿鼎记》中归家三侠击杀的是真太后还是假太后
- 2023兰州理工大学计算机考研信息汇总
- 多分类问题OvO,OvR,MvM
- 成为一个有目标的学习者
- .NET 5.0 正式版发布了!
热门文章
- Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 1
- wireshark网卡权限_网络分析系列之六_Wireshark安装
- oracle组合数据类型,oracle复合数据类型-相关方法
- 听课评课记录计算机应用,教师听课的评语(精选10篇)
- js禁止鼠标滑轮_js实现鼠标滑动到某个div禁止滚动
- python 读取 Excel 文件的方法 csv.reader
- c#补充print(多态性问题)【C#】
- 优雅的redux异步中间件 redux-effect
- kafka清理数据日志
- 中国制造2025变革,背后的大数据来龙去脉