在Python中打印unicode字符串列表时,为什么要使用u“xyz”格式?

2024-10-03 06:27:48 发布

您现在位置:Python中文网/ 问答频道 /正文

请遵守以下行为:

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}$

当我只打印变量ab中的两个值时,我得到了我期望的结果;当我把字符串值放入一个列表并打印它时,我得到了不需要的u"xyz"形式;最后,当我用循环打印列表中的值时,我再次得到第一个表单。有人能解释一下这种看似奇怪的行为吗?我知道可能有一个很好的理由。在


Tags: 字符串inan列表forfooiswith
3条回答

之所以这样,是因为列表可以包含任意数量的混合类型的元素。在第二种情况下,不是打印unicode字符串,而是打印列表本身——这与打印列表内容非常不同。在

因为列表可以包含任何内容,所以您得到u'foo'语法。如果您使用的是非unicode字符串,那么您将看到'foo',而不仅仅是foo。在

Python中的对象有两种转换成字符串的方法:粗略地说,str()生成人类可读的输出,repr()生成计算机可读的输出。打印时,它使用str()。在

但是列表的str()使用其元素的repr()。在

当您打印一个列表时,您会得到每个元素的repr(),列表并不是真正要打印的,所以python会尝试打印一些能代表其结构的内容。在

如果您想以任何特定的方式格式化它,要么明确说明您希望如何格式化它,要么重写它的__repr__方法。在

相关问题 更多 >