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]
当我 运行 这个 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]