繁体   English   中英

在Python中打印unicode字符串列表时,为什么会得到u“ xyz”格式?

[英]Why do I get the u“xyz” format when I print a list of unicode strings in 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,

结果是:

foo bár
[u'foo', u'b\xe1r']
foo bár

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

当您打印列表时,您会获得每个元素的repr() ,实际上并不是要打印列表,因此python会尝试打印代表其结构的内容。

如果要以任何特定方式设置其格式,请明确说明其设置方式,或重写__repr__方法。

Python中的对象有两种转换成字符串的方式:大致来说,str()产生人类可读的输出,而repr()产生计算机可读的输出。 当您打印某些内容时,它会使用str()。

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

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

由于列表可以包含任何内容,因此您可以使用u'foo'语法。 如果您使用的是非unicode字符串,那么也会看到'foo'而不是foo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM