zoukankan      html  css  js  c++  java
  • python中的str和repr函数的区别

    看了一些网上的解释,最主流的解释是“str是给人看的,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.

    返回一个字符串,这个字符串包含了一个对象的可打印表示。对于很多类型来讲,这个函数试图返回一个对象的字符串,这个字符串传入eval()以后返回的值,与这个对象相等,除非这个“表示”是那种被角括号包围的、包含了对象的类型名称的、还有一些附加信息通常是对象的地址和名称的字符串。一个类可以通过定义__repr__()方法来控制这个函数的返回值。

    python是个尽量实现用户友好的语言,尽量让它简单简单再简单,尽量让它不出错,无论怎样搞都有结果,而且那结果是用户常用的。

    使用C、C++、Java、C#、PHP等语言的人,基本上没有例外,都是程序猿、开发者,多少了解一些计算机的底层知识和原理,知道类、地址、变量等等,我们称之为开发者。而使用python的,还有另一类人,他们不是计算机科班,也不是搞开发的,他们是数据科学家、数据分析师、人工智能研究者等等,他们的专业可能是数学、物理、心理学、统计学、文学等等,他们可能不了解计算机底层知识(也不需要了解),他们只是使用一种工具,我们称之为用户。打个比方,如果我的目的是去另外一个城市,我可以选择开车、坐汽车、火车、飞机、轮船等等交通工具,C、C++、Java、C#、PHP这些就是开车,而python,就是坐火车(还不能比作飞机,它有点慢),只要买张到到目的地的票,剩下的事情不用管了,我不需要知道怎样启动火车怎样加速怎样刹车。而Java等语言,需要知道。所以Java等是开发者友好的,而python是用户友好的。这也是为什么近些年来随着数据量的增大网络传输速度的增加,python越来越火的原因,因为它简单。

    说了这么多的目的就是为了说明,str是面向用户的,给用户展示的是结果,repr是面向开发者的,展示的是更详细的描述。一个是结果,一个是描述,如果你想知道得更多,请用repr。

    下面是引用的文章中的例子,很能说明问题:

    >>> class A:
        pass
     
    >>> a1 = A()
    >>> a1
    <__main__.A object at 0x000000000302C358>
     
    >>> print(a1)
    <__main__.A object at 0x000000000302C358>
     
     
    >>> class A:
        def __str__(self):        #__str__使用:被打印的时候需要以字符串的形式输出的时候,就会找到这个方法,并将返回值打印出来
            return "我是一个字符串"                                                                      
    #要想显示对象的属性,可以(1)return 后加上你想要格式化输出的属性,比如: return "%d %s" % (int("123"), str(123))                                                                   
    #(2)利用字符串的format方法,比如:"{},{}".format(1,2)    
    >>> a1 = A()
    >>> a1
    <__main__.A object at 0x00000000033712E8>
     
    >>> print(a1)
    
    >>> import datetime
    >>> today = datetime.datetime.now()
    >>> str(today)
    '2012-03-14 09:21:58.130922'
    >>> repr(today)
    'datetime.datetime(2012, 3, 14, 9, 21, 58, 130922)'
    ---------------------
    
    作者:在到处之间找我 
    来源:CSDN 
    原文:https://blog.csdn.net/sinat_41104353/article/details/79254149 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    这个解释还是蛮靠谱的。

    https://blog.csdn.net/sinat_41104353/article/details/79254149#%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A3

  • 相关阅读:
    《C#微信开发系列(2)-自定义菜单管理》
    《C#微信开发系列(1)-启用开发者模式》
    python多进程: multiprocessing Pool 和tqdm
    前端
    python 缓存
    python pymysql
    python paramiko模块
    Linux之TCPIP内核参数优化
    python进程、线程、协程、IO多路复用
    python socket
  • 原文地址:https://www.cnblogs.com/Sabre/p/10226984.html
Copyright © 2011-2022 走看看