Opierając się na poprzednich odpowiedziach i pokazując więcej przykładów. Przy prawidłowym użyciu różnica między stri reprjest wyraźna. W skrócie reprnależy zwrócić ciąg znaków, który może być wklejony do kopiowania przebudowany dokładny stan obiektu, natomiast strjest przydatny do loggingi observingdebugowanie wyników. Oto kilka przykładów pokazujących różne wyniki dla niektórych znanych bibliotek.
Datetime
print repr(datetime.now())
print str(datetime.now())
Dobrze strjest wydrukować do pliku dziennika, gdzie reprmożna go zmienić, jeśli chcesz go uruchomić bezpośrednio lub zrzucić jako polecenia do pliku.
x = datetime.datetime(2017, 12, 12, 18, 49, 27, 134411)
Odrętwiały
print repr(np.array([1,2,3,4,5]))
print str(np.array([1,2,3,4,5]))
w Numpy reprjest ponownie bezpośrednio zużywalny.
Przykład niestandardowego 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)
W tym przykładzie reprzwraca ponownie ciąg, który może być bezpośrednio używany / wykonywany, ale strjest bardziej przydatny jako wyjście debugowania.
v = Vector3([1,2,3])
print str(v)
print repr(v)
Jedną z rzeczy, o których warto pamiętać, jeśli strnie jest określona, ale repr, strautomatycznie zadzwoni repr. Dlatego zawsze dobrze jest przynajmniej zdefiniowaćrepr