Наводячи основу на попередніх відповідях та показуючи ще кілька прикладів. При правильному використанні різниця між strі reprочевидна. Коротше, reprповинен повернути рядок, який можна скопіювати, щоб відновити точний стан об'єкта, тоді як strце корисно для результатів loggingта observingналагодження. Ось кілька прикладів, щоб побачити різні результати для деяких відомих бібліотек.
Дата, час
print repr(datetime.now())
print str(datetime.now())
strХороша для друку в лог - файл, в якому , як reprможе бути повторно визначив , якщо ви хочете , щоб запустити його прямо або скинути його як команди в файл.
x = datetime.datetime(2017, 12, 12, 18, 49, 27, 134411)
Numpy
print repr(np.array([1,2,3,4,5]))
print str(np.array([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)
print repr(v)
Одна річ , щоб мати на увазі, якщо strне визначене , але repr, strбуде автоматично викликати repr. Отже, завжди добре хоча б визначитисьrepr