2016-01-12 1 views
0

Je voudrais faire une liste de compréhension qui hash les éléments de 2 listes. Je suppose que ce serait ressembler à ceci:Python hashlib - Mettre à jour et Digérer pour la compréhension de la liste

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

(supposons éléments dans f et l sont encodées correctement)

Je suis incapable de le faire et je dois intégrer l'utilisation d'une fonction d'assistance

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

Il semble que la méthode update() ne retourne pas une instance de l'objet à utiliser pour les appels séquentiels. Je voudrais faire quelque chose d'analogue à 'BOB '.strip().lower()

De toute évidence, ma seule motivation est de l'utiliser dans une compréhension de liste.

Est-il possible de le faire?

Sinon, pourquoi update() ne retourne-t-il pas une instance de l'objet? Je pense qu'il y a quelque chose que je ne sais pas sur le hachage qui l'interdit ...

Répondre

2

La méthode de mise à jour ne renvoie rien, elle met juste à jour l'objet sur lequel elle est appelée. C'est juste comment c'est conçu.

Mais vous pouvez omettre la mise à jour et nourrir les données que vous souhaitez hachage directement au constructeur, de sorte que vous n'avez pas besoin de la fonction d'aide:

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

Votre appel pourrait ressembler à ceci:

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

Pour référence future, en Python 3, 'a' et' b' doivent être explicitement codés 'ASCII' pour que cela fonctionne. –