Я бы не использовал repr (myvariable) - он часто возвращает информацию о типе класса, адресе памяти и т. Д. Это более полезно для отладки. Используйте str (myvariable) для преобразования в строку и unicode (переменную) для преобразования в unicode.
Абган
2
Что насчет юникода? Нечто подобное str(u'ä')не сработает. Однако repr(u'ä')будет работать.
Рувен Б.
1
как насчет None и False?
fredless
54
strпредназначен для создания строкового представления данных объекта. Если вы пишете свой собственный класс и хотите strработать на себя, добавьте:
def __str__(self):return"Some descriptive string"
print str(myObj)позвоню myObj.__str__().
reprэто аналогичный метод, который обычно производит информацию о классе информации. Для большинства базовых объектов библиотеки reprвыдает имя класса (и иногда некоторую информацию о классе) в угловых скобках. reprбудет использоваться, например, просто введя ваш объект в панель взаимодействий, без использованияprint или чего-либо еще.
Вы можете определить поведение reprдля ваших собственных объектов так же, как вы можете определить поведение str:
Вероятно, это правда, что большинство объектов базовой библиотеки в процентном выражении возвращают представление object.__repr__угловых скобок -style, но многие из наиболее часто используемых - нет. Правило для reprявляется то , что , если это имеет смысл вернуться Python код , который может быть оценен , чтобы произвести тот же объект, сделать это, так же как str, frozensetи большинство других делать встроенные функции , но если этого не произойдет , используйте угловую-кронштейн форма, чтобы убедиться, что то, что вы возвращаете, не может быть ошибочно принято за читаемое человеком и оцениваемое как источник.
abarnert
(Конечно, некоторые из встроенных программ нарушают это практическое правило - a, listкоторый включает в себя, возвращает что-то, что не только выглядит, но и является оцениваемым кодом, который оценивает не то, что нужно - но разработчики ядра никогда не воспринимали это как лицензию для расширения того же самого поведение в stdlib.)
abarnert
19
Я вижу все ответы рекомендую использовать str(object). Может произойти сбой, если ваш объект содержит больше символов ascii, и вы увидите ошибку вроде ordinal not in range(128). Это было так для меня, когда я конвертировал список строк на языке, отличном от английского
Если вы хотите изменить способ строкового объекта, определите __str__(self)метод для класса объекта. Такой метод должен возвращать объект str или unicode.
Какой метод эффективен? str(any_var)илиany_var.__str__()
Kedar.Aitawdekar
@ Kedar.Aitawdekar: Даже если есть заметная разница во времени выполнения (что я сомневаюсь, но я призываю вас проверить его, используя timeitмодуль), вы должны использовать, str(any_var)так как он более читабелен для человека и позволяет извлечь выгоду из случаев, когда any_varопределяет, __repr__()но не делает т определить __str__().
Вернуть строку, содержащую хорошо печатаемое представление объекта. Для строк это возвращает саму строку. Разница с repr (объект) заключается в том, что str (объект) не всегда пытается вернуть строку, приемлемую для eval (); его цель - вернуть строку для печати. Если аргумент не указан, возвращает пустую строку ''.
Будьте осторожны, если вы действительно хотите «изменить» тип данных. Как и в других случаях (например, изменение итератора в forцикле), это может вызвать неожиданное поведение:
>> dct ={1:3,2:1}>> len(str(dct))12>>print(str(dct)){1:31,2:0}>> l =["all","colours"]>> len(str(l))18
str(var)
? это то, что вы ищете?Ответы:
Также попробуйте repr:
Это называется «преобразованием» в Python и встречается довольно часто.
источник
str(u'ä')
не сработает. Однакоrepr(u'ä')
будет работать.str
предназначен для создания строкового представления данных объекта. Если вы пишете свой собственный класс и хотитеstr
работать на себя, добавьте:print str(myObj)
позвонюmyObj.__str__()
.repr
это аналогичный метод, который обычно производит информацию о классе информации. Для большинства базовых объектов библиотекиrepr
выдает имя класса (и иногда некоторую информацию о классе) в угловых скобках.repr
будет использоваться, например, просто введя ваш объект в панель взаимодействий, без использованияprint
или чего-либо еще.Вы можете определить поведение
repr
для ваших собственных объектов так же, как вы можете определить поведениеstr
:>>> myObj
в панели взаимодействий, илиrepr(myObj)
, приведет кmyObj.__repr__()
источник
object.__repr__
угловых скобок -style, но многие из наиболее часто используемых - нет. Правило дляrepr
является то , что , если это имеет смысл вернуться Python код , который может быть оценен , чтобы произвести тот же объект, сделать это, так же какstr
,frozenset
и большинство других делать встроенные функции , но если этого не произойдет , используйте угловую-кронштейн форма, чтобы убедиться, что то, что вы возвращаете, не может быть ошибочно принято за читаемое человеком и оцениваемое как источник.list
который включает в себя, возвращает что-то, что не только выглядит, но и является оцениваемым кодом, который оценивает не то, что нужно - но разработчики ядра никогда не воспринимали это как лицензию для расширения того же самого поведение в stdlib.)Я вижу все ответы рекомендую использовать
str(object)
. Может произойти сбой, если ваш объект содержит больше символов ascii, и вы увидите ошибку вродеordinal not in range(128)
. Это было так для меня, когда я конвертировал список строк на языке, отличном от английскогоЯ решил это с помощью
unicode(object)
источник
str(object)
сделает свое дело.Если вы хотите изменить способ строкового объекта, определите
__str__(self)
метод для класса объекта. Такой метод должен возвращать объект str или unicode.источник
str(any_var)
илиany_var.__str__()
timeit
модуль), вы должны использовать,str(any_var)
так как он более читабелен для человека и позволяет извлечь выгоду из случаев, когдаany_var
определяет,__repr__()
но не делает т определить__str__()
.Используйте
str
встроенные:Примеры:
Из документации:
источник
С
str(x)
. Однако каждый тип данных может определять свое собственное преобразование строк, поэтому это может быть не то, что вам нужно.источник
Вы можете использовать
%s
как нижеисточник
Просто используйте
str
- например:источник
Используйте форматирование:
Пример:
Выходные: чт 11 января 20:40:05 2018
источник
Будьте осторожны, если вы действительно хотите «изменить» тип данных. Как и в других случаях (например, изменение итератора в
for
цикле), это может вызвать неожиданное поведение:источник