我认为您实际上对此感到惊讶的是,打印单个字符串与打印字符串列表的功能不同–无论是否为Unipre,这都是事实:
>>> hobby1 = u'Dizziness'>>> hobby2 = u'Vértigo'>>> hobbies = [hobby1, hobby2]>>> print hobby1Dizziness>>> print hobbies[u'Dizziness', u'Vxe9rtigo']
即使没有
u,您也有多余的引号,更不用说反斜杠转义了。而且,如果您使用
str字节字符串而不是
unipre字符串尝试相同的操作,那么您仍然会使用引号和转义符(如果源文件和终端使用不同的编码,则您可能会使用mojibake字符,但是忘记了这一部分)。
在Python中,每个对象都可以具有两种不同的表示形式:最终用户友好表示形式
str和程序员友好表示形式
repr。对于字节字符串,这些表示分别是
Painting和
'Painting'。对于Unipre字符串,它们是
Painting和
u'Painting'。
该
str,因此
print hobby1打印出
Painting,不带引号(
u如果为Unipre,则为)。
但是,
str列表的使用其
repr每个元素的,而不使用
str。因此,当您打印时
hobbies,每个元素都带有引号(
u如果是Unipre,则带有引号)。
乍一看这很奇怪,但这是一个故意的设计决定,一旦习惯了,这是有道理的。并且打印出来将是不明确的
[foo, bar,baz]-是三个字符串的列表还是两个字符串的列表,其中一个在中间有逗号?但是,更重要的是,无论您如何打印,列表 已经 不是用户友好的事情。
Myhobbies are [Painting, Stargazing]看起来和一样丑陋
My hobbies are ['Painting','Stargazing']。当您想向最终用户显示列表时,您总是想以某种有意义的方式显式格式化它。
通常,您想要的就是这样简单:
>>> print 'Hobbies:', ', '.join(hobbies)Hobbies: Painting, Stargazing
或者,对于Unipre字符串:
>>> print u'Hobbies:', u', '.join(hobbies)Hobbies: Painting, Stargazing



