请注意以下行为:
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,
结果是:
foo bár
[u'foo', u'b\xe1r']
foo bár
当我打印变量a
和b
中的两个值时,我得到了我期望的结果;当我将字符串值放在列表中并打印出来时,我得到了不需要的u"xyz"
形式;最后,当我用循环打印列表中的值时,我再次获得第一个表单。有人可以解释这个看似奇怪的行为吗?我知道这可能是一个很好的理由。
答案 0 :(得分:7)
当你打印一个列表时,你得到每个元素的repr()
,列表实际上不打算打印,所以python试图打印代表它的结构的东西。
如果您想以任何特定方式对其进行格式化,请明确说明您希望如何格式化,或者覆盖它的__repr__
方法。
答案 1 :(得分:1)
Python中的对象有两种方法可以转换为字符串:粗略地说,str()产生人类可读输出,而repr()产生计算机可读输出。当你打印一些东西时,它使用str()。
但是列表的str()使用其元素的repr()。
答案 2 :(得分:0)
你得到这个,因为列表可以包含任意数量的混合类型的元素。在第二种情况下,不是打印unicode字符串,而是打印列表本身 - 这与打印列表内容非常不同。
由于列表可以包含任何内容,因此您将获得u'foo'
语法。如果您使用的是非unicode字符串,那么您也会看到'foo'
而不只是foo
。