您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Python中打印字符串会在字符串之前打印'u'吗?

在Python中打印字符串会在字符串之前打印'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,每个元素都带有引号(u如果是Unicode,则带有引号)。

乍一看这很奇怪,但这是一个故意的设计决定,一旦习惯了,这是有道理的。并且打印出来将是不明确的[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 2022/1/1 18:49:59 有370人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶