请遵守以下行为:
a = u"foo"
b = u"b\xe1r" # \xe1 is an 'a' with an accent
s = [a, b]
print a, b
print s
for x in s: print x,
结果是:
^{pr2}$
当我只打印变量a
和b
中的两个值时,我得到了我期望的结果;当我把字符串值放入一个列表并打印它时,我得到了不需要的u"xyz"
形式;最后,当我用循环打印列表中的值时,我再次得到第一个表单。有人能解释一下这种看似奇怪的行为吗?我知道可能有一个很好的理由。在
Tags:
之所以这样,是因为列表可以包含任意数量的混合类型的元素。在第二种情况下,不是打印unicode字符串,而是打印列表本身——这与打印列表内容非常不同。在
因为列表可以包含任何内容,所以您得到
u'foo'
语法。如果您使用的是非unicode字符串,那么您将看到'foo'
,而不仅仅是foo
。在Python中的对象有两种转换成字符串的方法:粗略地说,str()生成人类可读的输出,repr()生成计算机可读的输出。打印时,它使用str()。在
但是列表的str()使用其元素的repr()。在
当您打印一个列表时,您会得到每个元素的
repr()
,列表并不是真正要打印的,所以python会尝试打印一些能代表其结构的内容。在如果您想以任何特定的方式格式化它,要么明确说明您希望如何格式化它,要么重写它的
__repr__
方法。在相关问题 更多 >
编程相关推荐