Python 2.x - 为什么字符串包含一个未在输出中编码的列表?

Python 2.x - Why are strings contained a list not encoded in output?

当我 运行 这个 python 脚本时:

#!/usr/bin/env python
# coding: windows-1250
lst = ['č']
s = 'č'
print lst
print s

我得到这个输出:

['\xc4\x8d']
č

为什么它们看起来不一样?

理论

print s 调用 s.__str__(),它 return 是一个编码字符串。

但是,print lst 调用 lst.__str__(),后者又调用列表成员的 __repr__()。与 __str__ 不同,__repr__ 不是 return 编码字符串。

练习

您可以通过以下测试代码确认这一点:

class Test(object):
    def __str__(self):
        return "__str__ was called"

    def __repr__(self):
        return "__repr__ was called"


if __name__ == "__main__":
    print Test()
    print [Test(), Test()]

将输出:

__str__ was called
[__repr__ was called, __repr__ was called]