怎样理解print 变量和直接打印的字符串变量?

怎样理解print 变量和直接打印的字符串变量?



[Copy to clipboard] [ - ]
CODE:
>>> s='this is 中文'
>>> s
'this is \xd6\xd0\xce\xc4'
>>> print s
this is 中文

为什么非要print才能显示中文呢?print语句底层是通过什么实现的呢?直接输一个变量是怎么解析呢?
终端模式应该都是对变量或者函数的一些描述

repr
print 能显示中文啊,它相当于str,但str也只是打印出编码啊,怎么理解?
repr(s) 与 str(s) 是不同的。
那怎样理解print语句打印出中文的问题?
print有一定的智能,它会先试str(x),如果不行,再试repr(x),有一个示例:

[Copy to clipboard] [ - ]
CODE:
>>> class A(object):
...     def __str__(self):
...         return 'str(A)'
...     def __repr__(self):
...         return 'repr(A)'
...     
>>> a = A()
>>> print a, str(a), repr(a)
str(A) str(A) repr(A)
>>> class A(object):
...     def __repr__(self):
...         return 'repr(A)'
...     
>>> a = A()
>>> print a, str(a), repr(a)
repr(A) repr(A) repr(A)

从上面的示例可以看出,有str的,print会使用它,从第二个示例可以看出,没有str的,会使用repr来处理。

注意python在打印一个对象时,它会先查看这个对象的__str__, __repr__方法,如果找不到,则会直接使用repr(x)来打印出内部表示来。其实一个简单的打印是一系列的判断和处理过程。
但是对于string有__str__,那print应该相当于__str__,但是print对于中文的string可以打印出中文,而__str__,__repr__只有编码。
这个是不是跟终端的默认编码有关系?
你举个例子?注意要使用print语句。而不是变量后面直接回车的。


[Copy to clipboard] [ - ]
CODE:
>>> s='中文'
>>> s
'\xd6\xd0\xce\xc4'
>>> print s
中文
>>> s.__str__()
'\xd6\xd0\xce\xc4'
>>> s.__repr__()
"'\\xd6\\xd0\\xce\\xc4'"

为什么print s就可以输出中文,而别的都是编码。说明print 与__str__还是不太一样?