如何重复使用 hashlib.md5 的实例

21

如何在Python中刷新(或重置)并重复使用hashlib.md5的实例?如果我在脚本中执行多个哈希操作,每次使用一个新的hashlib.md5实例似乎效率低下,但从Python文档中看不到任何刷新或重置实例的方法。


2
在假设创建一个小对象是“低效”的之前,请先进行基准测试。 - Glenn Maynard
2个回答

8

你认为重新创建一个对象是低效的吗?其实这只是一个小对象,而且对象的创建和销毁一直在进行。使用一个新的对象,不必担心它。


4
重复使用 hashlib 对象的原因不仅仅是为了提高速度。例如,您可能会收到一个 hashlib 对象(可以是 md5、sha1 等),想要重复使用它来创建多个文件的校验和。在这种情况下,可以传递一个 lambda 函数,以便在调用时创建新的 hashlib 对象,但这很麻烦。 - Suzanne Soy
6
这不是一个答案,而是对问题的指责。最多只能算是一条评论。 - Neowizard
@Neowizard 随意以任何你想要的方式回答这个问题。 - Ned Batchelder
同意Neowizard的看法 - 这不是对问题的回答。 - Kaffiene

-3

这是我所做的,只需编写一个重新初始化哈希对象的小包装器。处理了代码编写的笨拙,但也许不能提高运行时效率。

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

1
哈,那不是重复使用对象。我猜这个API中没有“reset”方法,所以不能重复使用?还是可以通过传递值给“update”方法来重置对象? - Gubatron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接