我对以下内容感到困惑:
>>>
>>> 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')
何时进行隐式类型转换以及何时不进行?
答案 0 :(得分:3)
这是unicode对象的str
和repr
之间的差异。如果将其粘贴回Python,repr
旨在提供等效对象,因此它包含u
; str
是为了人类的可读性,所以它不是。 str
和repr
字符串是相同的(它们只是相同的字符串)。
此处使用的相关规则是:
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)
>>> 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
将对象转换为字节字符串(它正在进行显式转换,不 隐式转换)。