@Lesnivila: Der Vergleich mit dem Fingerabdruck ist IMHO irreführend, weil die Fingerabdrücke von allen Menschen, lebend oder tot, unterschiedlich sind. Die `id()` von Objekten ist aber nur zur Lebzeit der Objekte unterschiedlich. Wenn ein Objekt ”stirbt” kann dessen `id()` durchaus wiederverwendet werden.
Code: Alles auswählen
a = [1, 2, 3]
i = id(a)
a = None # Die Liste kann ab jetzt aufhören zu existieren.
a = "Hallo"
print(i == id(a)) # Das hier *kann* durchaus `True` ausgeben.
Falls sie das nicht in einer späteren Ausgabe überarbeitet haben (meine Ausgabe ist noch bei Galileo Press erschienen), sollte beim zweiten `seek()` das zweite Argument auch nicht als magische 1 angegeben werden, sondern als verständliche(re) Konstante `os.SEEK_CUR`. Ist als Abkürzung natürlich auch nicht so schön, aber immerhin kann man danach besser suchen, wenn man wissen möchte was das bedeutet.
Man sollte keine einbuchstabigen Namen verwenden wenn man da problemlos sinnvollere, verständlichere schreiben kann. Zudem sollte man beim öffnen von Dateien wo das möglich ist, die ``with``-Anweisung verwenden.
Letztlich ist die Funktion auch viel zu umständlich, denn es gibt `int.from_bytes()`:
Code: Alles auswählen
#!/usr/bin/env python3
import os
def bytes2int(values):
return int.from_bytes(values, "little")
def main():
with open("test.bmp", "rb") as file:
file.seek(18)
print("Breite:", bytes2int(file.read(4)), "px")
print("Höhe:", bytes2int(file.read(4)), "px")
file.seek(2, os.SEEK_CUR)
print("Farbtiefe:", bytes2int(file.read(2)), "bpp")
if __name__ == "__main__":
main()
In einem echten Programm hätte ich den zweiten `seek()`-Aufruf auch mit einer absoluten Position geschrieben. Sonst muss man den gesamten Code davor lesen was der mit dem Dateizeiger anstellt, um herauszufinden an welcher absoluten Position dann gelesen wird, und das ist auch beim schreiben des Programms weniger fehleranfällig.
Ich hatte mit dem Tutorial in der Python-Dokumentation angefangen.