你看到的是打印字符串
打印列表
或者更一般地说,对象“非正式”和“正式”字符串表示(see documentation)之间的区别。
在第一种情况下,将使用unicode字符正确地打印unicode字符串。
在第二种情况下,列表项将使用它们的表示而不是它们的字符串值来打印。for line in f.readlines():
print line
是第一个(好的)案例,而且print f.readlines()
是第二个案子。
可以通过以下示例检查差异:a = u'ð€œłĸªßð'
print a
print a.__repr__()
l = [a, a]
print l
这显示了可以自己玩的特殊方法__str__()和__repr__()之间的区别。class Person(object):
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
def __repr__(self):
return ''.format(self.name)
p = Person('Donald')
print p # Prints 'Donald' using __str__
p # On the command line, prints '' using __repr__
也就是说,在控制台上简单键入对象名时看到的值由__repr__定义,而使用print时看到的值由__str__定义。