python打印unicode';异常';
我对以下几点感到困惑:python打印unicode';异常';,python,unicode,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') 隐式类型转换完成与否的规则是什么?语句调用参
>>>
>>> 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')
隐式类型转换完成与否的规则是什么?语句调用参数
>>> 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')
Python 2不执行隐式类型转换,除非将Unicode字符串(属于
Unicode
类型)添加到字节字符串(属于str
类型)中(Python 3从不执行隐式类型转换)str
将对象转换为字节字符串(它进行显式转换,而不是隐式转换)。这是unicode对象的str
和repr
之间的区别。repr
用于在将对象粘贴回Python时提供一个等价的对象,因此它包括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))
,并将其结果放入元组,因此使用该字符串的repr,而不是str(z)
的reprz