2010-11-09 6 views
11

Wie können Sie eine Instanz von hashlib.md5 in Python leeren (oder zurücksetzen)? Wenn ich mehrere Hashing-Operationen in einem Skript durchführe, scheint es ineffizient zu sein, jedes Mal eine neue Instanz von hashlib.md5 zu verwenden, aber aus der Python-Dokumentation sehe ich keine Möglichkeit, die Instanz zu leeren oder zurückzusetzen.Wie Sie eine Instanz von hashlib.md5 wiederverwenden

+1

Benchmark das nächste Mal vor der Annahme, ein kleines Objekt zu erstellen, ist "ineffizient". –

Antwort

6

Warum ist es Ihrer Meinung nach ineffizient, einen neuen zu bauen? Es ist ein kleines Objekt und Objekte werden ständig erstellt und zerstört. Benutze ein neues und mach dir keine Sorgen darüber.

+1

Es gibt andere Gründe als die Geschwindigkeit, ein hashlib-Objekt wiederzuverwenden. Beispielsweise können Sie das hashlib-Objekt empfangen (das md5, sha1, ... sein kann) und es erneut verwenden, um die Prüfsumme mehrerer Dateien zu erstellen. In diesem Fall könnte man ein Lambda übergeben, das beim Aufruf ein neues Hashlib-Objekt erzeugt, aber das ist umständlich. –

-1

Hier ist, was ich getan habe, schreiben Sie einfach einen kleinen Wrapper, der das Hash-Objekt reinitialisiert. Behandelt die Ungeschicklichkeit des Code-Schreibens, aber möglicherweise nicht die Effizienz zur Laufzeit.

def Hasher(object): 
    def __init__(self): 
     self.md5 = hashlib.md5() 

    def get_hash(self, o): 
     self.md5.update(o) 
     my_hash = self.md5.digest() 
     self.md5 = hashlib.md5() 
     return my_hash 
+0

ha, das Objekt wird nicht wiederverwendet. Ich denke, es gibt keine "reset" -Methode in dieser API, so dass es nicht wiederverwendet werden kann. Oder gibt es einen Wert, den Sie an die "update" -Methode übergeben können, um das Objekt zurückzusetzen? – Gubatron

Verwandte Themen