使用Python打印列表
我有一个从Excel单元格中整理出来的列表,用Python编写,叫做listlist
。这个列表里的每个元素都是unicode格式。当我像这样打印这个列表时:
print listlist
我看到每个列表成员前面都有个'u'。但是当我像这样打印列表时:
for member in listlist:
print member
我就看不到成员前面的'u'了。
有人能告诉我为什么会有这个区别吗?这是不是xlrd模块里定义的?
4 个回答
3
在Python中,有两种方法可以把一个值变成字符串,分别是 str
和 repr
(还有它们对应的类方法 __str__
和 __repr__
)。这两者的区别主要在于这两个函数的用途。从Python教程中可以了解到:
str()
函数的目的是返回比较容易让人理解的值的表示,而repr()
则是生成可以被解释器读取的表示(如果没有对应的语法,会引发语法错误)。
print
语句会对你传入的对象调用 str
,但是列表的 __str__
方法会对它里面的值调用 repr
。你列表里的值是unicode字符串。在人类可读的形式下,unicode的特性并不重要,所以你不会看到 u
,甚至连引号都没有。而在计算机可读的形式下,这个特性是很重要的,所以会包含 u
。
4
当你打印一个列表的时候,它会用列表里每个对象的 __repr__
方法来显示这些对象。
而当你单独打印一个对象时,它会用这个对象的 __str__
方法来显示。
7
这是因为 print list
和下面的内容是一样的:
print "[", ", ".join(repr(i) for i in list), "]"
repr(s)
对于一个 Unicode 字符串来说是 u"blabla"
,而 print s
只会显示 blabla
。