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.
@jens: Es ist halt sinnvoller über Zahlen zu iterieren. Was hätte denn dort geliefert werden sollen? Bytearrays der Länge 1? Das wäre ja noch merkwürdiger.
@jens: die (Geschmacks)Frage ist, was ist 1 Byte, eine Zahl oder ein Zeichen. Um es deutlicher von Schriftzeichen abzugrenzen, haben sich die Python-3 Macher halt für die Zahl entschieden. Damit geht auch sowas:
@jens: Das ist keine versteckte Umwandlung. Zwischen *was* denn? Der Datentyp heisst `bytes`! Das ist *keine* Zeichenkette. Wenn Du über Zeichen iterieren möchtest, dann verwende `str` und nicht `bytes`. Bytes sind Zahlwerte zwischen 0 und 255, wenn die als Zeichen iteriert würden, *das* wäre eine (ungewollte) Umwandlung. Und mit welcher Kodierung sollten denn Bytewerte über 127 umgewandelt werden?
BlackJack hat geschrieben:@jens: Das ist keine versteckte Umwandlung. Zwischen *was* denn? Der Datentyp heisst `bytes`! Das ist *keine* Zeichenkette.
Ich iteriere über "type bytes" und erhalte "type integer" Das ist doch schon was anderes, auch wenn man beide in das jeweilige andere umwandeln kann...
Wie kann man das am besten in Py 2 und 3 machen?
In Py2 auch immer in Zahlenlisten umwandeln? oder in Py3 die zahlen zu bytes wandeln?
jens hat geschrieben:Wie kann man das am besten in Py 2 und 3 machen?
In Py2 auch immer in Zahlenlisten umwandeln? oder in Py3 die zahlen zu bytes wandeln?
Wobei man kann ja ganz Allgemein zwei Strategien fahren:
1. Alles wie in Py2 machen und ausnahmen für Py3 machen...
2. anders herum: Wie in Py3 vorgesehen machen und ausnahmen für Py2 machen...
@jens: Was ist das denn für eine Argumentation? Du iterierst über ein Containerobjekt. Du beschwerst Dich doch auch nicht das man beim Iterieren über Listen nicht grundsätzlich Listen bekommt sondern halt Werte/Typen die da drin stecken. Wenn Du über `bytes` iterierst, müsstest Du nach Deiner Logik also etwas vom Typ `byte` bekommen. Und was erwartet man üblicherweise von einem Byte? Richtig, das es sich verhält wie eine Zahl zwischen 0 und 255 (oder -128 bis 127). Das ist jedenfalls bei den üblichen Programmiersprachen die einen Byte-Typ haben so. Und weil `int`\s diese Anforderung schon erfüllen macht es halt keinen Sinn extra einen `byte`-Typ einzuführen.
@jens: Wenn es dir um die textuelle Darstellung beim Iterieren geht (d.h. Interpretation der Bytewerte als einzelne Zeichen, notwendigerweise aus einem definierten Zeichensatz), dann nutze halt für Strings in Python 2.x grundsätzlich Unicode. Dann dürftest du für beide Python-Zweige ein gleiches Verhalten beim Iterieren haben.
EDIT: Und dass die Ergebnisse unter Python 2.x einfach nur die hexadezimale Darstellung des Bytewerts sind, die man auch locker selber hinbekommen kann, ist dir bekannt, oder? Notfalls musst du halt einen Wrapper einführen, dessen ``__iter__``-Methode ein versionsübergreifendes Verhalten definiert.