Добрый день.
Есть следующая функцияция для расчета контрольной суммы:
import hashlib
def hashfile(afile, hasher=hashlib.sha256(), blocksize=65536):
buf = afile.read(blocksize)
while len(buf) > 0:
hasher.update(buf)
buf = afile.read(blocksize)
return hasher.hexdigest()
Когда вызываю функцию с аргументами по умолчанию, то хеш всегда разный:
>>> hashfile(open('/home/ch1s7ya/dev/check-files/test/test2', 'rb'))
'a74886ccae8826acdaac6caf886f3f444b783f5e1af9b6fa576e3fcb4fd46c94'
>>> hashfile(open('/home/ch1s7ya/dev/check-files/test/test2', 'rb'))
'a6296b87bf154156094547ac4cdd3515bd0e5c45850806e79d079f034b5ef147'
>>> hashfile(open('/home/ch1s7ya/dev/check-files/test/test2', 'rb'))
'13b0b8daaed3dbbea149e9053bbe141208de3b98570835593792eebfa4c51e34'
Но когда аргумент hasher задаю вручную, то хеш одинаковый:
>>> hashfile(open('/home/ch1s7ya/dev/check-files/test/test1', 'rb'), hashlib.sha256())
'634b027b1b69e1242d40d53e312b3b4ac7710f55be81f289b549446ef6778bee'
>>> hashfile(open('/home/ch1s7ya/dev/check-files/test/test1', 'rb'), hashlib.sha256())
'634b027b1b69e1242d40d53e312b3b4ac7710f55be81f289b549446ef6778bee'
>>> hashfile(open('/home/ch1s7ya/dev/check-files/test/test1', 'rb'), hashlib.sha256())
'634b027b1b69e1242d40d53e312b3b4ac7710f55be81f289b549446ef6778bee'
Чем обосновывается такое поведение?