“u”在打印列表中的元素之前?我没有在代码中输入你。
hobbies = []
#prompt user three times for hobbies
for i in range(3):
hobby = raw_input('Enter a hobby:')
hobbies.append(hobby)
#print list stored in hobbies
print hobbies
运行此命令时,它会打印列表,但其格式如下:
Enter a hobby: Painting
Enter a hobby: Stargazing
Enter a hobby: Reading
[u'Painting', u'Stargazing', u'Reading']
None
在列表的每个元素之前,这些“u”来自哪里?
“u”不是字符串的一部分,但表示该字符串是unicode字符串。
我认为您实际上感到惊讶的是,打印单个字符串与打印字符串列表不同,无论它们是否为Unicode都是这样:
即使没有
u
,也有那些额外的引号,更不用说反斜杠转义了。如果使用str
字节字符串而不是unicode
字符串尝试相同的方法,则仍然会使用引号和转义符(另外,如果源文件和终端的编码不同,则可能会使用mojibake字符……但请忘记这一部分)。在Python中,每个对象都可以有两种不同的表示:终端用户友好的表示
str
,以及程序员友好的表示repr
。对于字节字符串,这些表示分别是Painting
和'Painting'
。对于Unicode字符串,它们是Painting
和u'Painting'
。print
语句使用str
,因此print hobby1
输出Painting
,不带引号(或者u
,如果是Unicode)。然而,列表的
str
使用其每个元素的repr
,而不是str
。所以,当您打印hobbies
时,每个元素周围都有引号(如果是Unicode,则还有一个u
)。一开始这可能看起来很奇怪,但这是一个有意的设计决定,一旦你习惯了它就有意义了。打印出
[foo, bar, baz]
是一个由三个字符串组成的列表,还是一个由两个字符串组成的列表,其中一个字符串中间有一个逗号?但是,更重要的是,一个列表已经不是一个用户友好的东西,不管你如何打印出来。My hobbies are [Painting, Stargazing]
看起来和My hobbies are ['Painting', 'Stargazing']
一样难看。当您想向最终用户显示列表时,您总是希望以某种有意义的方式显式地格式化它。通常,你想要的就是这么简单:
或者,对于Unicode字符串:
不打印字符串,而是打印包含字符串的列表的表示形式。
相关问题 更多 >
编程相关推荐