我有一个从excel单元格编译的列表,使用python - 比如listlist
。单元格/列表中的每个元素都是unicode。当我将列表打印为
print listlist
我看到'u'被添加到列表的每个成员之前。但是当我打印像
这样的列表时for member in listlist:
print member
我没有看到'u'在会员面前。
有人可以向我解释为什么会有这种差异?它是在xlrd模块中定义的吗?
答案 0 :(得分:6)
这是因为print list
等同于
print "[", ", ".join(repr(i) for i in list), "]"
对于unicode字符串, repr(s)
为u"blabla"
,而print s
仅打印blabla
。
答案 1 :(得分:4)
打印列表时,它使用对象的__repr__
单独打印对象时,它使用对象的__str__
答案 2 :(得分:3)
有两种方法可以将Python值转换为字符串str
和repr
(及其等效的类方法__str__
和__repr__
)。不同之处在于这两个功能。来自Python tutorial:
str()函数用于返回值相当于人类可读的值的表示,而repr()用于生成可由解释器读取的表示(或者如果没有等效的语法,则强制执行SyntaxError )。
print
语句会在您传入的对象上调用str
,但列表的__str__
方法会在其值上调用repr
。列表的值是unicode字符串。在人类可读的形式中,它的unicode是无关紧要的,因此你不会得到u
,甚至引用标记。以计算机可读形式,这很重要,因此包含u
。
答案 3 :(得分:1)
当您打印列表时,python会打印列表的表示。
列表的默认表示是打印一个左方括号([
),然后是用逗号(,
)分隔的每个元素的表示,一个右方括号({{ 1}})。 (确切地说,对象的表示是在调用其]
成员时返回的内容)。请注意,unicode字符串的默认表示形式为__repr__()
。
现在,当您打印字符串时,您不打印字符串的表示,而是打印字符串(通过调用u'...'
成员返回的值)。并且字符串不包括格式化字符,如unicode标志,引号等......