str()
используется для «довольно печатания», но в интерпретаторе Python вы, скорее всего, захотите получить справочную информацию, такую как идентификатор объекта, какой класс он и т. Д. (Теоретически), и repr()
используется для этого. Если вы запустите pydoc __builtin__.repr
, он говорит: «Для большинства типов объектов, eval (repr (object)) == object." Есть несколько типов, которые совершенно разные, но метод __str__
возвращает то же самое. Например, str(str(some_object))
- это то же самое, что и str(same_object)
, поэтому, если бы у меня был список, [0, 4, 5]
, и я напечатал его str
, я бы получил [0, 4, 5]
. Если бы я напечатал str(mylist)
с str()
, я бы все равно получил [0, 4, 5]
, хотя они разные. Однако с repr()
str(mylist)
будет напечатан как '[0, 4, 5]'
, что более вероятно, что я искал. Кто-то, кто использует интерпретатор, вероятно, что-то тестирует или отлаживает что-то, и он хотел бы знать, что это строка, а не список.
Полное умозрение: В интерактивной среде, вы, вероятно, скопировать и вставить результат одного выражения в новое выражение. Если это обычный вариант использования, то 'repr' более полезен, чем' str'. – Kevin
Потому что это делает больше смысла для интерактивной отладки ** сложных ** значений !? Если выражение приводит к экземпляру класса, простой 'print' может не дать вам никакой или вводящей в заблуждение информации. Попробуйте распечатать экземпляр 'datetime' например ... это строка или объект ...? – deceze
* «По-видимому, лучший выбор во многих отношениях» * - приведенный вами пример не показывает этого вообще, 'repr' недвусмысленно, когда строка имеет непечатаемые символы и пробелы. – jonrsharpe