在Python中,在字符串之前打印字符串“u”?

2024-05-19 05:07:04 发布

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

“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”来自哪里?


Tags: 代码in元素列表forpromptthreeprint
3条回答

“u”不是字符串的一部分,但表示该字符串是unicode字符串。

我认为您实际上感到惊讶的是,打印单个字符串与打印字符串列表不同,无论它们是否为Unicode都是这样:

>>> hobby1 = u'Dizziness'
>>> hobby2 = u'Vértigo'
>>> hobbies = [hobby1, hobby2]
>>> print hobby1
Dizziness
>>> print hobbies
[u'Dizziness', u'V\xe9rtigo']

即使没有u,也有那些额外的引号,更不用说反斜杠转义了。如果使用str字节字符串而不是unicode字符串尝试相同的方法,则仍然会使用引号和转义符(另外,如果源文件和终端的编码不同,则可能会使用mojibake字符……但请忘记这一部分)。


在Python中,每个对象都可以有两种不同的表示:终端用户友好的表示str,以及程序员友好的表示repr。对于字节字符串,这些表示分别是Painting'Painting'。对于Unicode字符串,它们是Paintingu'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']一样难看。当您想向最终用户显示列表时,您总是希望以某种有意义的方式显式地格式化它。

通常,你想要的就是这么简单:

>>> print 'Hobbies:', ', '.join(hobbies)
Hobbies: Painting, Stargazing

或者,对于Unicode字符串:

>>> print u'Hobbies:', u', '.join(hobbies)
Hobbies: Painting, Stargazing

不打印字符串,而是打印包含字符串的列表的表示形式。

for hobby in hobbies:
  print hobby

相关问题 更多 >

    热门问题