深入了解python2.7 str(), repr(), (``操作符)的区别

python2.7语法中存在很多标准类型,如整形、长整形、浮点型、复数、列表、元祖、字典等。不同的标准类型在通过str(), repr(), (``操作符)转换后会是什么样的结构呢?😀

类型转换.png

番外话:str(), repr(), (``操作符)的作用及区别

作用:以字符串的方式获取对象的内容、类型、数值属性
区别:str()得到的字符串可读性好;
     repr()得到的字符串通常用来重新获得该对象;
     ``操作符得到的字符串本身

实验一:整型的转换比较

In [1]: str(10)
Out[1]: '10'
---
In [2]: repr(10)
Out[2]: '10'
---
In [3]: `10`
Out[3]: '10'
---
总结:三种方式转换对于整型效果一样,且保留原有格式输出

实验二:长整型的转换比较

In [4]: str(678L)
Out[4]: '678'
---
In [5]: repr(678L)
Out[5]: '678L'
---
In [6]: `678L`
Out[6]: '678L'
---
总结:str()方式会省略L标识,其他保留原有格式输出

实验三:浮点型的转换比较

In [7]: str(3.14159)
Out[7]: '3.14159'
---
In [8]: repr(3.14159)
Out[8]: '3.14159'
---
In [9]: `3.14159`
Out[9]: '3.14159'
---
总结:三种方式转换对于浮点型效果一样,且保留原有格式输出

实验四:复数的转换比较

In [10]: str(123+45j)
Out[10]: '(123+45j)'
---
In [11]: repr(123+45j)
Out[11]: '(123+45j)'
---
In [12]: `123+45j`
Out[12]: '(123+45j)'
---
总结:三种方式转换对于复数效果一样,加上括号格式输出

实验四:列表的转换比较

In [13]: str([1, 2, 3, 4, 5])
Out[13]: '[1, 2, 3, 4, 5]'
---
In [14]: repr([1, 2, 3, 4, 5])
Out[14]: '[1, 2, 3, 4, 5]'
---
In [15]: `[1, 2, 3, 4, 5]`
Out[15]: '[1, 2, 3, 4, 5]'
---
In [16]: str([1, 2, [3, 4, 5]])
Out[16]: '[1, 2, [3, 4, 5]]'
---
In [17]: repr([1, 2, [3, 4, 5]])
Out[17]: '[1, 2, [3, 4, 5]]'
---
In [18]: `[1, 2, [3, 4, 5]]`
Out[18]: '[1, 2, [3, 4, 5]]'
---
总结:三种方式转换对于列表效果一样,且保留原有格式输出

实验五:元祖的转换比较

In [19]: str((1, 2, 3, 4, 5))
Out[19]: '(1, 2, 3, 4, 5)'
---
In [20]: repr((1, 2, 3, 4, 5))
Out[20]: '(1, 2, 3, 4, 5)'
---
In [21]: `(1, 2, 3, 4, 5)`
Out[21]: '(1, 2, 3, 4, 5)'
---
In [22]: str((1, 2, (3, 4, 5)))
Out[22]: '(1, 2, (3, 4, 5))'
---
In [23]: repr((1, 2, (3, 4, 5)))
Out[23]: '(1, 2, (3, 4, 5))'
---
In [24]: `(1, 2, (3, 4, 5))`
Out[24]: '(1, 2, (3, 4, 5))'
---
In [25]: str(1, 2, 3, 4, 5)
Out[25]: Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: str() takes at most 1 argument (5 given)
---
In [26]: repr(1, 2, 3, 4, 5)
Out[26]: Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: repr() takes exactly one argument (5 given)
---
In [27]: `1, 2, 3, 4, 5`
Out[27]: '(1, 2, 3, 4, 5)'
总结:我们知道x, y = 1, 2,其实类似元祖赋值;在25、26、27比较时发现除``操作符可识别,其他str(),repr()只能传入1个参数,不认识1, 2, 3, 4, 5是个元组

实验六:字典的转换比较

In [28]: str({'name': 'xiaoming', 'age': 18})
Out[28]: "{'age': 18, 'name': 'xiaoming'}"
---
In [29]: repr({'name': 'xiaoming', 'age': 18})
Out[29]: "{'age': 18, 'name': 'xiaoming'}"
---
In [30]: `{'name': 'xiaoming', 'age': 18}`
Out[30]: "{'age': 18, 'name': 'xiaoming'}"
---
In [31]: str({'name': 'xiaoming', 'score': [{'chinese': 100, 'math': 98}]})
Out[31]: "{'score': [{'math': 98, 'chinese': 100}], 'name': 'xiaoming'}"
---
In [32]: repr({'name': 'xiaoming', 'score': [{'chinese': 100, 'math': 98}]})
Out[32]: "{'score': [{'math': 98, 'chinese': 100}], 'name': 'xiaoming'}"
---
In [33]: `{'name': 'xiaoming', 'score': [{'chinese': 100, 'math': 98}]}`
Out[33]: "{'score': [{'math': 98, 'chinese': 100}], 'name': 'xiaoming'}"
---
总结:三种方式转换对于列表效果一样,且保留原有格式输出

最后总结

str()输出的值一般是给人看的;repr()一般是给python看的,可以通过eval()转为python对象;下面为官方API介绍:

def repr(p_object): # real signature unknown; restored from __doc__
    """
    repr(object) -> string
    
    Return the canonical string representation of the object.
    For most object types, eval(repr(object)) == object.
    """
    return ""
---
    def __init__(self, string=''): # known special case of str.__init__
        """
        str(object='') -> string
        
        Return a nice string representation of the object.
        If the argument is a string, the return value is the same object.
        # (copied from class doc)
        """
        pass
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容