2010-03-31 2 views
11

ho una lunga funzione, come si vede qui sotto:modo corretto di mettere la funzione lungo le chiamate su più linee

hash_correct = hashlib.md5(salt + password)).digest().encode("base64") 

vorrei dividerlo in due linee, ma non sono sicuro del modo corretto di fai questo in Python?

Grazie.

+1

dup: http://stackoverflow.com/questions/53162/how-can-i-do-a-line-break-line-continuation-in-python – bernie

+1

Questa domanda è diversa da quella a cui si fa riferimento non è una lunga stringa. – ensnare

+2

@ensnare: si applicano le stesse regole. La risposta accettata a questa domanda elenca tutti i modi possibili per spezzare una lunga fila in Python. – bernie

risposta

20

Le linee guida di codifica che limitano la lunghezza delle linee sono lì, in parte, per rendere il codice più leggibile. Nel tuo caso di chiamate con metodo concatenato, il significato non è chiaro. Dovresti scegliere alcuni nomi di variabili temporanee per i valori intermedi in modo che un lettore del codice possa capire facilmente la catena.

Un esempio potrebbe essere:

safe_md5 = hashlib.md5(salt + password) 
crypto_hash = safe_md5.digest() 
hash_correct = crypto_hash.encode('base64') 

Questo conduce il lettore lungo un sentiero del giardino alla comprensione. Molto poco è perso nelle prestazioni, e il codice aggiuntivo è tutto aggiunto per scopo.

+0

Penso che manchi un'invocazione sulla funzione '.digest', ma a parte questo, ottima risposta. – bcherry

+0

Grazie. L'ho riparato. –

+0

Questo è stato davvero utile. Grazie! – ensnare

3

Preferisco la risposta di Charles Merram, ma ho pensato che valesse la pena notare come funzionante ma brutto e da scoraggiare. Perché '.' è un lessicale delimiter, i seguenti lavorato:

>>> 'abc def' . split() 
['abc', 'def'] 
>>> 'abc def' . \ 
... split() 
['abc', 'def'] 
>>> sys.version 
'2.6.4 (r264:75706, Dec 7 2009, 18:45:15) \n[GCC 4.4.1]' 

ma non lo faccio.