Wie ist das mit den Strings?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Monty90
User
Beiträge: 3
Registriert: Samstag 24. März 2012, 15:14

Hallo!
Ich muss zugeben, dass ich noch nicht so gut in Python programmieren kann, deshalb jetzt auch diese Anfängerfrage:

Was genau habe ich in python unter einem String zu verstehen? Ist ein string nur ein haufen Schreibbare zeichen also sowas: "Hello World!" oder auch eine Folge von Bytes also: "0x41,0x42,0x43,0x44,0x00,0x44"?
Was ist der Unterschied zwischen einem Sting und dem, was von bytearray() zurückgegeben wird? Gibt so eine Funktion: http://python-pefile.sourcearchive.com/ ... 8e0b3.html nun einen String oder ein Bytearray zurück?

Ich habe bis jetzt nur ein bischen C Programmiert und da ist ein String ja einfach nur ein Array aus Bytes, ich glaube desshalb habe ich grade ein kleines Probelm mit den Python Stings...
Das wäre nett wenn mich da jemand kurz aufklähren könnte.

mfg Monty90
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Dann hängt von der Pythonversion ab. In allen 2.x-er Versionen kannst du String und Bytes synonym verwenden und in etwas so verstehen wie Strings unter C. Ab 3.x wird zwischen Strings und rohen Bytes unterschieden. Bevor ich versuche das alles zu erklären, verlinke eich einfach mal auf den entsprechenden Abschnitt in der Dokumentation. Das sollte hoffentlich die Unklarheiten beseitigen.

Sebastian
Das Leben ist wie ein Tennisball.
Monty90
User
Beiträge: 3
Registriert: Samstag 24. März 2012, 15:14

Danke für deine Antwort!

Aber irgendwie scheint ein Byte doch noch etwas anderes zu sein als ein Buchstabe im String:

Code: Alles auswählen

>>> for i in a:
...     i = i*2
...     print i
... 
HH
ee
ll
ll
oo
  
WW
oo
rr
ll
dd
!!>>> for i in bytearray(a):
...     i = i*2
...     print i
... 
144
202
216
216
222
64
174
222
228
216
200
66
wenn ich aber das Bytearray von "Hello World!" mit print ausgeben würde dann würde das gannze wieder wie ein String behandelt... Ist das bei allen funktionen so?
BlackJack

@Monty90: Natürlich ist der Python-Typ `bytearray` etwas anders als der Python-Typ `str`. Sonst wäre es ja sinnlos beide zu haben.

Wie sich die jeweiligen Typen in Funktion verhalten hängt davon ab was die Funktionen damit anstellen wollen.

Wenn Du etwas mit ``print`` ausgibst, wird das Objekt gefragt wie es als `str` aussieht. Das entscheidet jedes Objekt beziehungsweise jeder Datentyp für sich. `bytearray`-Exemplare geben auf diese Anfrage eine Zeichenkette mit den Bytewerten als "Zeichen" zurück.
Monty90
User
Beiträge: 3
Registriert: Samstag 24. März 2012, 15:14

Wo ist den dann der Unterschied und wie kann ich ein bytearray zurück zu einem String konvertieren?
deets

strings in Python sind immutable - so wie zB in Java. Du kannst also keine Zeichen in ihen Veraendern. Mit Bytearrays hingegen geht das. Aber ein Rat fuer den Anfang: vergiss einfach, dass es bytearrays gibt. Ich kann mich nicht erinnern, wann ich sie mal gebraucht haette in den letzten Jahren - ganz sicher jedenfalls fuer nichts, das ich mit String-manipulation versucht habe.
Antworten