Seite 1 von 1

string literals

Verfasst: Freitag 15. September 2017, 12:23
von Daikoku
Hallo,

ich hätte zwei kurze Frage. Zuerst einmal ein Code Snippet:

Code: Alles auswählen

a = '  Hallo\nUwe '
print('=> type(a)={} and len(a)={}:'.format(type(a), len(a)))
print('1.:', '>{}<'.format(a))
print('2.:', '>{}<'.format(' '.join(a.split())))
print('-' *40)

a = r'  Hallo\nUwe '
print('=> type(a)={} and len(a)={}:'.format(type(a), len(a)))
print('3.:', '>{}<'.format(a))
print('4.:', '>{}<'.format(' '.join(a.split())))
print('-' * 40)

import codecs
c = codecs.decode(a, 'unicode_escape')
print('=> type(c)={} and len(c)={}:'.format(type(c), len(c)))
print('5.:', '>{}<'.format(' '.join(c.split())))
Ausgabe:

[codebox=text file=Unbenannt.txt]
=> type(a)=<class 'str'> and len(a)=12:
1.: > Hallo
Uwe <
2.: >Hallo Uwe<
----------------------------------------
=> type(a)=<class 'str'> and len(a)=13:
3.: > Hallo\nUwe <
4.: >Hallo\nUwe<
----------------------------------------
=> type(c)=<class 'str'> and len(c)=12:
5.: >Hallo Uwe<
[/code]

Meine Fragen:

Ich benutze Python 3.6.2.

1. Wie kann ich herausfinden, ob ein Objekt ein normaler oder ein raw string ist ?
typ() führt jeweils zu den gleichen Ergebnissen, aber ' '.join(a.split()) erzeugt, erwartbar sehr unterschiedliche Ausgaben.
Um jeweils zu einem gleichen Ergebnis zu kommen, müsste ich also vorher Wissen, um welche Art von Objekt es sich handelt, aber wie mache ich das ?

2. Um einen raw string wieder in einen normalen string zu konvertieren, ist mir nur codecs.decode() eingefallen. Gibt es eine bessere Lösung ?

Vielen Dank

Re: string literals

Verfasst: Freitag 15. September 2017, 12:36
von __deets__
Es gibt keine raw String Objekte. Es gibt sie nur als literale. Sie erlauben dir beim schreiben von code auf Escspes zu verzichten. Intern sind sie aber immer ununterscheidbar weil eben einfach ein String.