byte-Array im Speicher zum immer wieder überschreiben...

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
Benutzeravatar
akis.kapo
User
Beiträge: 127
Registriert: Freitag 1. September 2006, 12:58

Hi all,

ich nutze aktuell in einer Schleife strings, die ich immer wieder überschreibe:

Code: Alles auswählen

for i in bla:
    s = i + s[3] # whatever...
Soll ja nicht so gemacht werden eigentlich. Doch wie wäre der aktuelle Weg in
python 2.6.x für begabte Python Programmierer?

Früher hab ich (c)StringIO() genutzt und statt den String zu überschreiben
einfach .reset(), .truncate() benutzt. Es war schneller als den String jedes
mal zu überschreiben. Ausserdem brauch ich ohnehin kein Unicode String, sondern
nur bytes von 0-255 (File-I/O).

Was ist die aktuelle Methode in 2.6.x und in 3.x (io.*)?

Am einfachsten ist es vergleichbar mit nem C-char-array.
Hauptsache schnell und wenig GC-overhead.

Brauch nur ein Stichwort und ein Beispiel.
(Ok, vielleicht noch nen Link auf die doc.python.* libref...)

Danke wie immer im Voraus.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Man würde auf ein bytearray() zurückgreifen ;) Ist das gleiche wie bytes(). allerdings mutable.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

akis.kapo hat geschrieben:Am einfachsten ist es vergleichbar mit nem C-char-array.
Nimm doch ein C-char-array:

Code: Alles auswählen

from ctypes import c_char
array = (c_char*42)()
array[0:5] = "Hallo"; array[6:10]="Welt"
print `array.raw`
print `array.value`
Geht auch in Python < 2.6, wenn du die Abwärtskompatibilität nicht brauchst, ist bytearray vermutlich schneller.
Antworten