宝慕林4294392
建立在先前的答案之上,并显示更多示例。如果使用正确,则str和之间的区别repr很明显。总之repr应当返回一个可复制粘贴到重建对象的确切状态的字符串,而str为有用logging和observing调试结果。以下是一些示例,以查看某些已知库的不同输出。约会时间print repr(datetime.now()) #datetime.datetime(2017, 12, 12, 18, 49, 27, 134411)print str(datetime.now()) #2017-12-12 18:49:27.134452可以将str其打印到日志文件中,repr如果要直接运行该日志文件或将其作为命令转储到文件中,可以将其重新用途。x = datetime.datetime(2017, 12, 12, 18, 49, 27, 134411)脾气暴躁的print repr(np.array([1,2,3,4,5])) #array([1, 2, 3, 4, 5])print str(np.array([1,2,3,4,5])) #[1 2 3 4 5]在Numpy中,它又repr可以直接消费。自定义Vector3示例class Vector3(object): def __init__(self, args): self.x = args[0] self.y = args[1] self.z = args[2] def __str__(self): return "x: {0}, y: {1}, z: {2}".format(self.x, self.y, self.z) def __repr__(self): return "Vector3([{0},{1},{2}])".format(self.x, self.y, self.z)在此示例中,repr再次返回可以直接使用/执行的字符串,而str作为调试输出更为有用。v = Vector3([1,2,3])print str(v) #x: 1, y: 2, z: 3print repr(v) #Vector3([1,2,3])有一点要记住,如果str没有定义,但是repr,str会自动调用repr。因此,至少定义一个总是好的repr