gpt4 book ai didi

python - 打印字符串在 Python 中的字符串之前打印 'u'?

转载 作者:太空狗 更新时间:2023-10-29 21:14:45 24 4
gpt4 key购买 nike

'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”是从哪里来的?

最佳答案

我认为您在这里真正感到惊讶的是,打印单个字符串与打印字符串列表的效果不同——无论它们是否为 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

关于python - 打印字符串在 Python 中的字符串之前打印 'u'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19170808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com