2011-03-21 117 views
4

我有一个使用python从excel单元格编译的列表 - 比如listlist。单元/列表中的每个元素都是unicode。当我打印列表为使用python打印一个列表

print listlist 

我看到“U”前置到列表中的每个成员。但是,当我打印的清单像

for member in listlist: 
    print member 

我没有看到“U”前置到成员。

有人可以向我解释为什么有这种差异?它是否在xlrd模块中定义?

回答

6

这是因为print list相当于

print "[", ", ".join(repr(i) for i in list), "]" 

repr(s)u"blabla"为unicode字符串,而只有print s打印blabla

+0

谢谢。这解释了它。 – Sumod 2011-03-21 11:13:52

4

当打印清单,其使用对象的__repr__

当单独打印物体,它使用对象的__str__

1

当你打印列表,蟒蛇打印的表示显示在列表中的每个对象的名单。

列表的默认表示是打印的开口方括号([),然后用逗号(,)分离的每个元素的所述表示,该闭方括号(])。 (准确地说,一个对象的表示形式是调用它的__repr__()成员时返回的内容)。请注意,unicode字符串的默认表示形式是u'...'

现在,当你打印一个字符串,不打印字符串的表示,要打印的字符串(通过调用__str__()成员返回的值)。和字符串不包括格式化字符如Unicode的标志,报价等..

3

有两种方法把一个Python值转换成字符串strrepr(等效类的方法__str____repr__)。差异来自这两个功能。从Python tutorial

的STR()函数是指以返回其是相当人类可读的值的表示,而再版()是指,以产生可以由解释器来读取(或将强制表示如果没有等效语法,则返回SyntaxError)。

print声明要求您通过在物体上str,但名单的__str__方法调用它的价值观repr。您的列表的值是unicode字符串。以可读的形式,它的unicode实际上是无用的,所以你不会得到u,甚至不会引用标记。在计算机可读形式中很重要,因此包含u