使用Python打印列表

4 投票
4 回答
5479 浏览
提问于 2025-04-16 14:06

我有一个从Excel单元格中整理出来的列表,用Python编写,叫做listlist。这个列表里的每个元素都是unicode格式。当我像这样打印这个列表时:

print listlist

我看到每个列表成员前面都有个'u'。但是当我像这样打印列表时:

for member in listlist:
  print member

我就看不到成员前面的'u'了。

有人能告诉我为什么会有这个区别吗?这是不是xlrd模块里定义的?

4 个回答

3

在Python中,有两种方法可以把一个值变成字符串,分别是 strrepr(还有它们对应的类方法 __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

撰写回答