1
>>> s = u"4-12\u4e2a\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e0b\u5212\u7ebf"
>>> print s
4-12个英文字母、数字和下划线
>>> print repr(s)
u'4-12\u4e2a\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e0b\u5212\u7ebf'
2
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'
1和2是不同的,但原始字符串是相同的,都是'4-12个英文字母,数字和下划线'
repr究竟做了什么?
相同的值是:
>>> print '4-12个英文字母、数字和下划线'.decode('gb2312').encode('unicode-escape')
4-12\u4e2a\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u4e0b\u5212\u7ebf
答案 0 :(得分:2)
我将对此进行一次尝试,'repr'是对象的机器表示,而'print'显示对象的人类可读表示。内置方法“ repr ”,“ str ”和“ unicode ”可供程序员用来实现不同的可打印表示一个对象。这是一个简单的例子
class PrintObject(object):
def __repr__(self):
return 'repr'
def __str__(self):
return 'str'
def __unicode__(self):
return 'unicode'
现在,如果您将此对象加载到python shell中并使用它,您可以看到这些不同的方法如何用于表示对象的可打印表示
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'
如果只输入实例并返回
,则使用' repr '方法>>> printObj
repr
如果在实例上使用print
,则使用' str '方法>>> print(printObj)
str
如果在unicode字符串中使用该实例,则使用和' unicode '方法。
>>> print(u'%s' % printObj)
unicode
当你开始编写自己的课程时,这些方法非常方便。
答案 1 :(得分:1)
关于repr
>>> 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.
答案 2 :(得分:1)
在第一种情况下,Python解释器通过终端编码自动解码传递给它的字节,因为它是unicode文字。打印repr()
会生成Unicode转义序列。
在第二种情况下,由于它是str字面值,因此不进行解码,因此其repr()
由与终端编码中的字符对应的字节转义序列组成(在本例中为GB2312)。 / p>
答案 3 :(得分:1)
在第一种情况下,您将获得unicode对象的repr。这在概念上是一系列unicode字符,repr为您提供这些字符的unicode代码点序列作为转义序列。即'\ u4e2a'是代码点20010(0x4e2a是十六进制表示),显示为“个”。
在第二种情况下,您将获得字符串对象的repr。字符串本质上是8位值的序列,没有关于这些值如何与字符相关的内部知识。在提示符下打印或输入这些字符时,将使用系统的默认编码对其进行解释。当您打印对象的repr时,您会看到构成它的原始字节 - 可打印的ASCII字符按原样打印,其他所有内容都显示为转义序列(即\ xb8是值184(以十六进制写入0xB8) )。在系统的编码(gb2312)中,字节序列[184,246]('\ xb8 \ xf6')对应于unicode代码点0x4e2a。然而,字符串不知道它是什么编码,或者甚至它代表一系列字符,所以它的repr只给你原始的底层数据。要将其转换为unicode对象,您需要从此数据中解码它,指示应如何解释原始数据:
>>> s=s.decode('gb2312')
在python3中,“字符”和“数据”之间的区别变得更加清晰,因为str对象被重命名为“bytes”,现在unicode字符串变成了字符串。