Вопрос для начинающего Python RE: Тип форматирования строки и функция repr () - PullRequest
4 голосов
/ 28 августа 2011

Итак, у меня есть этот код:

    formatter = "%r %r %r %r"

print formatter % (1, 2, 3, 4)
print formatter % ("one", "two", "three", "four")

И я получаю этот вывод:

1 2 3 4

'один' 'два' 'три' 'четыре'


Мой вопрос:

Почему вторая строка вывода содержит одинарные кавычки? Я не совсем уверен, как на самом деле работает тип преобразования% r.

Когда я изменяю код на:

formatter = "%r %r %r %r"

print formatter % (1, 2, 3, 4)
print "%s %s %s %s" % ("one", "two", "three", "four")

Я получаю этот результат:

1 2 3 4

один два три четыре

Я просто не понимаю, почему они работают по-другому. Может кто-нибудь сломать это для меня?


Я прочитал:

http://docs.python.org/library/stdtypes.html &

http://docs.python.org/library/functions.html#repr

Ответы [ 2 ]

2 голосов
/ 28 августа 2011

С выражением 'abc%rdef' % obj деталь '%r' заменяется на repr(obj)

С выражением 'ABC%sDEF' % obj деталь '%s' заменяется на str(obj)

.

repr () - это функция, которая для обычных объектов возвращает строку, аналогичную той, которую вы написали бы в скрипте, чтобы определить объект, переданный в качестве аргумента для repr () функция:

Для многих типов эта функция пытается вернуть строку, которая выдает объект с таким же значением при передаче в eval () http://docs.python.org/library/functions.html#repr

.

Пример 1

, если вы считаете список, определенный как li = [12,45,'haze']

print li напечатает [12,45, "дымка"]

print repr(li) также напечатает [12,45, 'haze'] , потому что [12,45,'haze'] - это последовательность символов, которые записываются в сценарии для определения списка li с этим значением

Пример 2

если вы считаете строку, определенную ss = 'oregon':

print ss напечатает oregon , без кавычек вокруг

print repr(ss) напечатает 'oregon' , поскольку 'oregon' - это последовательность символов, которую необходимо написать в скрипте, если вы хотите определить строку ss с помощью значение oregon в программе

.

Таким образом, это означает, что фактически для обычных объектов repr () и str () возвращают строки, которые в общем случае равны, за исключением строкового объекта. Это делает repr () особенно интересным для строковых объектов. Для примера очень полезно проанализировать содержимое HTML-кодов.

0 голосов
/ 28 августа 2011

%s говорит python, чтобы он вызывал функцию str() для каждого элемента вашего кортежа. %r заставляет python вызывать функцию repr() для каждого элемента вашего кортежа.

По документам:

ул ()

Возвращает строку, содержащую красиво для печати представление объекта. Для строк это возвращает строку сам по себе.

магнезии ()

Возвращает строку, содержащую печатаемое представление объекта.

Это означает, что если объект, который вы вызываете repr(), является строковым объектом (в python все является объектом), он показывает вам, как представлены различные символы.

@ ваш конкретный вопрос: я предполагаю, что "..." указывают, что это строка. Если вы вызываете repr () для int, нет "...".

...