2014年4月15日星期二

Python中的repr和str

介绍

Python中有两个将对象转字符串的魔法方法:__repr____str__。分别可以使用内建函数repr(obj)str(obj)来调用。
很长一段时间我都不了解__repr__的作用,经常连方法名都不记得,只是简单的将__repr__理解为打印而__str__则是字符化。

事实上,我错了。

我们可以打开Python控制台,输入以下代码:

s = "hello world"
s
print s
print repr(s)
print str(s)

注意,以上代码仅在控制台才能正确被执行。

上面代码输出以下内容:

‘hello world’
hello world
‘hello world’
hello world

真相

我们可以看到,第一个和第三个输出是相同的,字符串两侧带上了引号,第二个和第四个则是同样的输出字符串中的内容。

好像和我想象的不一样。

于是我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.

一看到representation这个词就懂了,为啥叫repr?原来是这个对象的字面表述。

因此我们知道了__repr__的设计标准是eval(repr(object)) == object,而不单单是输出内容啊。

扩展

Python字符串也提供了一个方式使用对象的__repr__

print "str:%s" % s
print "repr:%r" % s

输出:

str:hello world
repr:’hello world’


@LYC
转载请注明出处

0 评论:

发表评论