як змінити будь-який тип даних на рядок у python


135

Як я можу змінити будь-який тип даних у рядок на Python?


10
str(var)? це те, що ти шукаєш?
SilentGhost

2
Ви хочете, щоб люди читали рядок даних? Або ви хочете байтовий вид пам'яті, що містить дані?
Джеремі Браун

Будьте уважні до типу даних, які потрібно змінити. Дивіться відповідь нижче
PythoNic

Відповіді:


126
myvariable = 4
mystring = str(myvariable)  # '4'

також спробуйте repr:

mystring = repr(myvariable) # '4'

Це називається "перетворення" в python, і є досить поширеним явищем.


6
Я б не використовував repr (мінливий) - він часто повертає інформацію про тип класу, адресу пам'яті тощо. Це корисніше для налагодження. Використовуйте str (мінливий) для перетворення в рядок та 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:

def __repr__(self):
    return "Some descriptive string"

>>> myObjна панелі взаємодій, або repr(myObj), це призведе доmyObj.__repr__()


Напевно, правда, що більшість основних об'єктів бібліотеки за необробленими відсотками повертають object.__repr__-style кут-дужку представлення, але багато з найбільш часто використовуваних - ні. Правило для reprє те , що , якщо це має сенс повернутися Python код , який може бути оцінений , щоб зробити той же об'єкт, зробити це, так само як str, frozensetі більшість інших робити вбудовані функції , але якщо цього не станеться , використовуйте кутову-кронштейн форму, щоб переконатися, що те, що ви повертаєтесь, неможливо помилитися з реприпом, що читається і оцінюється людиною як джерело.
abarnert

(Звичайно, деякі з вбудованих порушують це правило: a, listщо включає в себе, повертає те, що не тільки виглядає, але є кодом, що оцінюється, що оцінюється не так - але основні розробники ніколи не брали це як ліцензію на розширення того ж самого поведінка в stdlib.)
abarnert

19

Я бачу, що всі відповіді рекомендую використовувати str(object). Він може вийти з ладу, якщо у вашого об'єкта більше символів ascii, і ви побачите помилку ordinal not in range(128). Так було для мене, коли я перетворював список рядків мовою, відмінною від англійської

Я вирішив це за допомогою unicode(object)


7
у Python 3.0 далі, str (object) робить unicode за замовчуванням
dmjalund

13

str(object) зробить трюк.

Якщо ви хочете змінити спосіб об'єднання строків, визначте __str__(self)метод для класу об'єкта. Такий метод повинен повернути str або unicode об'єкт.


Який метод ефективний? str(any_var)абоany_var.__str__()
Kedar.Aitawdekar

@ Kedar.Aitawdekar: Навіть якщо є помітна різниця у часі виконання (в чому я сумніваюся, але я закликаю вас переглядати це за допомогою timeitмодуля), вам слід користуватися, str(any_var)оскільки він є більш зрозумілим для людини і дозволяє отримати вигоду з випадків, коли any_varвизначає, __repr__()але не ' t визначити __str__().
Абган

Спасибі за Вашу відповідь.
Kedar.Aitawdekar

12

Використовуйте strвбудований:

x = str(something)

Приклади:

>>> str(1)
'1'
>>> str(1.0)
'1.0'
>>> str([])
'[]'
>>> str({})
'{}'

...

З документації:

Поверніть рядок, що містить добре зображений об'єкт для друку. Для рядків це повертає сам рядок. Різниця з repr (object) полягає в тому, що str (object) не завжди намагається повернути рядок, прийнятний для eval (); її мета - повернути рядок для друку. Якщо аргумент не наводиться, повертає порожній рядок, ''.


5

З str(x). Однак кожен тип даних може визначити власне перетворення рядків, тому це може бути не тим, що потрібно.


3
Це важливий, але рідкісний розгляд. Добре, що ви це згадали.
ятанізм



0

Використовувати форматування:

"%s" % (x)

Приклад:

x = time.ctime(); str = "%s" % (x); print str

Вихід: Чт 11 січня 20:40:05 2018


0

Будьте уважні, якщо ви дійсно хочете "змінити" тип даних. Як і в інших випадках (наприклад, зміна ітератора в forциклі), це може спричинити несподівану поведінку:

>> dct = {1:3, 2:1}
>> len(str(dct))
12
>> print(str(dct))
{1: 31, 2: 0}
>> l = ["all","colours"]
>> len(str(l))
18
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.