Python 这些代码之间的区别是什么?repr的作用是什么?

Python 这些代码之间的区别是什么?repr的作用是什么?,python,Python,一, 二, 1和2不同,但原始字符串相同,都是'4-12'个英文字母、数字和下划线' 报告具体做什么 相同的值为: print repr("4-12个英文字母、数字和下划线") '4-12\xb8\xf6\xd3\xa2\xce\xc4\xd7\xd6\xc4\xb8\xa1\xa2\xca\xfd\xd7\xd6\xba\xcd\xcf\xc2\xbb\xae\xcf\xdf' 关于repr >>> print '4-12个英文字母、数字和下划线'.decode('gb23

一,

二,

1和2不同,但原始字符串相同,都是'4-12'个英文字母、数字和下划线'

报告具体做什么

相同的值为:

print repr("4-12个英文字母、数字和下划线")
'4-12\xb8\xf6\xd3\xa2\xce\xc4\xd7\xd6\xc4\xb8\xa1\xa2\xca\xfd\xd7\xd6\xba\xcd\xcf\xc2\xbb\xae\xcf\xdf'
关于repr

>>> print '4-12个英文字母、数字和下划线'.decode('gb2312').encode('unicode-escape')
4-12\u4e2a\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e0b\u5212\u7ebf

在第一种情况下,Python解释器自动解码了终端编码在字符中传递给它的字节,因为它是unicode文本。打印的
repr()
将生成Unicode转义序列


在第二种情况下,由于它是str文本,因此不进行解码,因此它的
repr()
由与终端编码中的字符(在本例中为GB2312)对应的字节转义序列组成。

在第一种情况下,您得到的是unicode对象的repr。这在概念上是一系列unicode字符,repr将这些字符的unicode代码点序列作为转义序列提供给您。ie“\u4e2a”是代码点20010(0x4e2a是十六进制表示),显示为“个".

在第二种情况下,您将获得字符串对象的repr。字符串基本上是8位值的序列,没有关于这些值与字符的关系的内部知识。当您在提示下打印或输入这些字符时,它们将使用系统的默认编码进行解释。当您打印对象的repr时,y您可以看到组成它的原始字节-可打印ASCII字符按原样打印,其他所有字符都显示为转义序列(即\xb8是值184(以十六进制写入0xB8))。在系统编码(gb2312)中,字节序列[184246](“\xb8\xf6”)对应于unicode编码点0x4e2a。但是字符串不知道它是什么编码,甚至不知道它代表一个字符序列,因此它的repr只提供原始基础数据。要将其转换为unicode对象,需要从该数据对其进行解码,指示应如何解释原始数据:

>>> help(repr)
Help on built-in function repr in module __builtin__:

repr(...)
    repr(object) -> string

    Return the canonical string representation of the object.
    For most object types, eval(repr(object)) == object.

在python3中,“字符”和“数据”之间的区别变得更加清晰,因为str对象被重命名为“字节”“,现在的unicode字符串变成了字符串。

我想尝试一下,'repr'是对象的机器表示,而'print'显示的是对象的人类可读表示。程序员可以使用内置方法“repr”、“str”和“unicode”来实现对象的不同可打印表示。下面是一个简单的例子

>>> s=s.decode('gb2312')
现在,如果您将这个对象加载到python shell中并使用它,您可以看到如何使用这些不同的方法来表示对象的可打印表示

class PrintObject(object):
    def __repr__(self):
        return 'repr'

    def __str__(self):
        return 'str'

    def __unicode__(self):
        return 'unicode'
如果只需键入实例并返回,则使用“repr”方法

Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from printobject import PrintObject
>>> printObj = PrintObject()
>>> printObj
>>> repr(printObj)
'repr'
>>> str(printObj)
'str'
>>> unicode(printObj)
u'unicode'
如果在实例上使用print,则使用“str”方法

>>> printObj
repr
如果在unicode字符串中使用实例,则使用“unicode”方法

>>> print(printObj)
str
当您开始编写自己的类时,这些方法非常有用

>>> print(printObj)
str
>>> print(u'%s' % printObj)
unicode