2016-01-12 5 views
0

Я хотел бы сделать список, который хэширует элементы из 2 списков. Я предполагал, что это будет выглядеть следующим образом:Python hashlib - обновление и дайджест для понимания списка

hashes = [hashlib.md5().update(a + b).digest() for a, b in zip(f,l)] 

(предположим, элементы в f и l кодируются правильно)

Я не в состоянии сделать это, и мне нужно, чтобы включить использование вспомогательной функции

def update_digest(s): 
    h = hashlib.md5() 
    h.update(s) 
    return h.digest() 

Похоже, что метод update() не возвращает экземпляр объекта, который будет использоваться для последовательных вызовов. Я бы хотел сделать что-то аналогичное 'BOB '.strip().lower()

Очевидно, моя единственная мотивация использует его в понимании списка.

Есть ли способ сделать это?

Если нет, то почему update() не возвращает экземпляр объекта? Я чувствую, что есть что-то, что я не знаю о хешировании, которое его запрещает ...

ответ

2

Метод обновления ничего не возвращает, он просто обновляет объект, на который он вызван. Это именно то, как он разработан.

Но вы можете пропустить обновление и кормить данные, которые вы хотите, чтобы хэш непосредственно конструктору, так что вам не нужны вспомогательные функции:

hashlib.md5("foobar").digest() 

Ваш звонок может выглядеть следующим образом:

hashes = [hashlib.md5(a+b).digest() for a, b in zip(f,l)] 
+1

Для дальнейшего использования в Python 3, 'a' и' b' должны быть 'ASCII' закодированы явно, чтобы это работало. –

 Смежные вопросы

  • Нет связанных вопросов^_^