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 --

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android web通讯录,Android手机开发之通讯录

Android手机开发——通讯录实现增加、查询、修改、删除的功能,输入联系人信息,点击“添加”按钮,可以添加联系人信息到数据库;点击“查询”按钮,会发现添加的联系人信息显示在界面中;重新输入联系人电话&am…

有关UITableView--cell复用问题

近来用Tableview做了一个九宫格。过程中碰到了两个cell复用问题。 问题一: 在cell中为button添加addTarget点击事件时,出现后面的cell会重叠它前面cell的事件。代码如下: C代码 static NSString *CellWithIdentifier "DiscoverHomeTab…

python客户端和服务端实验_结合服务器和客户端python

我正在尝试使用python(稍后可能用c语言)和TCP套接字制作一个本地网络聊天程序。我的目的是让服务器监听当前计算机的地址以获取传入消息,并将这些消息转发给客户端(我现在还不确定)。客户端将是一个简单的gui,可以通过本地连接向活动服务器发送消息。实际…

python常用语法和示例_C语言切换案例教程,语法,示例和规则

python常用语法和示例使用默认情况下的决策 (Decision making using switch-case-default) Many times in our daily lives, we face conditions where we are required to choose between a number of alternatives rather than just two or three. For example, which school…

android so abi适配,Android NDK学习(六): so文件兼容之abiFilters的使用

最近项目中遇到了要使用JavaCV的情况,涉及到了abi兼容的选择。因为如果全部都适配的话,包很大,这样兼容那些用户数极少的cpu就很不划算,所以我只适配了armeabi-v7a这一个。但是今天在x64-v8a的模拟器上看的时候,提示我…

python中doc=parased.getroot()_python中执行sed命令操作源文件时出现错误

我想在python中执行一个sed命令,第一种方法直接指定文件时,可以正确输出结果,但是第二种我打开文件操作的时候就有问题,不知道什么原因,求高手解答?(1)>>> sedcmd"sed -n \s/{//g; p\ /qye/p…

JavaScript基础之Number对象和Math对象

2019独角兽企业重金招聘Python工程师标准>>> //Math对象//属性float Math.E; //返回自然对数的底数e,约2.718float Math.LN2; //返回2的自然对数,约0.693float Math.LN10; //返回10的自然对数,约2.302fl…

c++ stl 获取最小值_如何在C ++ STL中找到向量的最小/最小元素?

c stl 获取最小值Given a vector and we have to minimum/smallest element using C STL program. 给定一个向量,我们必须使用C STL程序最小/最小元素。 寻找向量的最小元素 (Finding smallest element of a vector) To find a smallest or minimum element of a …

android studio panic,Android Studio模拟器PANIC错误

Android Studio模拟器突然停止工作.当我尝试运行虚拟设备时,我在事件日志中收到以下错误.模拟器:PANIC:找不到AVD系统路径.请定义ANDROID_SDK_ROOT仿真器:处理完成,退出代码为1所以我检查了ANDROID_SDK_ROOT环境变量设置的值,它是空的.所以我把它设置为/Users/{username}/Libra…

linux特殊权限之访问权限

特殊权限如/etc/passwd:sSuid:普通用户以管理员身份运行命令(chmod us FILE、chmod u-s FILE)如果FILE本身原来就有执行权限,SUID显示为s;否则显示SSgid:基本组以管理组身份运行命令(chmod gs FILE、chmod g-s FILE&am…

vb.net变量值变化触发事件_Angular变化检测的理解

获取脏检查的时机Angular 使用NgZone获取变化的通知,然后进行全面的变化检测,进而更新Dom脏检查的过程Angular的数据流是自顶而下,从父组件到子组件单项流动,单项数据流保证了高效可预测的变化检测。尽管检查了父组件之后&#xf…

python 算术右移_Python算术序列| 竞争编码问题

python 算术右移Question: 题: In mathematics, when in an arithmetic sequence is a sequence of numbers such that the difference between the consecutive terms is constant then it is called arithmetic constant. 在数学中,当在算术序列中是…

Android8内测申请,小米 6 安卓 8.0 来了 内测开始招募

Android 8.0 已经正式发布多时,目前不少厂商已经启动了旗下进行的 Android 8.0 适配计划。但令人纳闷的是,一向对系统升级比较热心的小米却迟迟没有动静。好消息是,此前网友曝光的消息显示,MIUI 已经悄然在官方论坛中招募小米 6 的…

My linux

为什么80%的码农都做不了架构师?>>> 1.linux 命令方式修改机器名称 # hostname newHostName # vi /etc/sysconfig/network 修改或增加配置:hostnamenewHostName # vi /etc/hosts 修改对应的本地HOST映射 xx.xxx.xxx.xxx newHostName 2.Redha…

狂神说es笔记_人教版七上英语Unit5电子课本音频+课堂笔记+课后同步习题

1人教 七上英语Unit5单词七年级英语上册Unit 5单词默写1做;干(助动词)__________2做,干(助动词第三人称单数形式)__________3有__________4网球__________5球__________6乒乓球______7球棒;球拍__________8(英式)足球____________________9排…

Java RandomAccessFile getFilePointer()方法与示例

RandomAccessFile类getFilePointer()方法 (RandomAccessFile Class getFilePointer() method) getFilePointer() method is available in java.io package. getFilePointer()方法在java.io包中可用。 getFilePointer() method is used to get the current pointer in the Rando…

先进技术android,React Native实战(JavaScript开发iOS和Android应用)/计算机科学先进技术译丛...

导语内容提要本书作者Nader Dabit是AWS Mobile开发人员、React Native Training创始人和React Native Radio播客主持人。本书旨在帮助iOS、Android和Web开发人员学习使用React Native框架,构建高质量的iOS和Android应用程序。书中介绍了React Native入门基础知识&am…

开发类似vs的黑色风格_传闻:2020年《使命召唤》将是《黑色行动》重启作品

据可信度较高的消息源透露,2020 年的《使命召唤》将是《黑色行动》的重启作。而据之前的报道,《黑色行动》开发商 Treyarch 正在开发今年的《使命召唤》, Sledgehammer Games 和 Raven Software 负责辅助工作。该项目代号为“宙斯”&#xff…

ubuntu中 不同JDK版本之间的切换

Ubuntu中JDK 的切换前提是同时安装了多个版本,如jdk7和jdk8,若要切换,在终端输入: sudo update-alternatives --config javasudo update-alternatives --config javac

osi模型:七层模型介绍_联网| OSI模型能力问题和解答 套装1

osi模型:七层模型介绍1) There are the following statements that are given below, which of them are correct about the OSI model? The OSI model is a reference model that describes the network functionalities.The OSI model is an implemented model that describ…