python print unicode'anomaly'

时间:2013-12-15 06:31:30

标签: python unicode

我对以下内容感到困惑:

>>> 
>>> a
'abc'
>>> z
u'xyz'
>>> print a,z
abc xyz
>>> print (a,z)
('abc', u'xyz')
>>> print [a,z]
['abc', u'xyz']
>>> print (a,str(z))
('abc', 'xyz')

何时进行隐式类型转换以及何时不进行?

3 个答案:

答案 0 :(得分:3)

这是unicode对象的strrepr之间的差异。如果将其粘贴回Python,repr旨在提供等效对象,因此它包含u; str是为了人类的可读性,所以它不是。 strrepr字符串是相同的(它们只是相同的字符串)。

此处使用的相关规则是:

  • 在解释器提示处提及变量回显其repr
  • print使用str
  • print a,z打印由空格分隔的两个对象 - 它解析为print (a), (z)。它使用两者的str
  • print(a, z)构建并打印包含两个对象的元组。 print [a,z]的行为类似,只不过它构建并打印一个列表。在这两种情况下,print都使用容器的str - 对于元组和列表,它都使用其内容的repr
  • print(a, str(z))首先调用str(z),并将其结果放入元组中 - 因此使用字符串的repr,而不是{{1}的repr }。

答案 1 :(得分:0)

print语句调用str以获取参数。

>>> a = 'abc'
>>> z = u'xyz'
>>> str(a)
'abc'
>>> str(z)
'xyz'
>>> print a, z
abc xyz
>>> print str(a), str(z)
abc xyz

>>> str((a,z))
"('abc', u'xyz')"
>>> str([a,z])
"['abc', u'xyz']"
>>> print (a,z)
('abc', u'xyz')
>>> print str((a,z))
('abc', u'xyz')

答案 2 :(得分:0)

Python 2不执行隐式类型转换,除非将Unicode字符串(属于unicode类型)添加到字节字符串(属于str类型)(Python 3不能)不要进行隐式类型转换。 str将对象转换为字节字符串(它正在进行显式转换, 隐式转换)。