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
Antwort
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.
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. –
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
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
- 1. Wie die gleiche Instanz von Fragmenten speichern und wiederverwenden?
- 2. Fine Uploader-Code für Multi-Instanz wiederverwenden
- 3. Kann ich eine UserTransaction-Instanz nach commit() wiederverwenden?
- 4. Eine ClearCase-Ansicht wiederverwenden
- 5. Elemente von HTML wiederverwenden
- 6. SqlCommand wiederverwenden?
- 7. Kann ich die SOLR Instanz wiederverwenden, die mit Tridion kommt?
- 8. Wiederverwenden von Elementen und Datacontext
- 9. Wie debuggen Sie eine AWS RDS-Instanz?
- 10. Wie erstellen Sie eine Instanz von FileStream aus FileStream?
- 11. Wie geben Sie die Instanz von dem eine Funktion
- 12. Wie Sie eine Instanz von javax.imageio.spi.IIORegistry mit korrektem Gültigkeitsbereich erhalten
- 13. Wiederverwenden von Lucene-Abfrageobjekten
- 14. Drupal: Wiederverwenden von facettierten Suchblöcken
- 15. wie android alertdialog wiederverwenden
- 16. Wie StringBuilder Obj wiederverwenden?
- 17. Wie "propagieren" Sie eine Instanz in eine Unterklasse?
- 18. Java und Gurke, wie Szenario Multithread wiederverwenden
- 19. Wie strukturieren Sie Ihre Entitäten, die Sie wiederverwenden möchten?
- 20. Wie kann ich InputStreams wiederverwenden?
- 21. Wie eine Instanz von Werttypen mit Reflexion
- 22. Wie erstellt man eine Instanz von org.springframework.dao.DataAccessException?
- 23. Wie erstelle ich eine Instanz von HttpContext?
- 24. Wie verwandle ich eine Animal-Instanz in eine Dog-Instanz?
- 25. Wiederverwenden von LESS verschachtelte Formate
- 26. Wiederverwenden Unteransicht
- 27. Wiederverwenden Sie die Ansicht Ausgangsmatrix in Matlab
- 28. Wie Sie identische Eigenschaften auf .NET-Klasse wiederverwenden
- 29. Wiederverwenden von Funktionen in C++
- 30. Fragmente wiederverwenden
Benchmark das nächste Mal vor der Annahme, ein kleines Objekt zu erstellen, ist "ineffizient". –