2010-03-31 12 views
11

ich eine lange Funktion haben, wie unten zu sehen:korrekte Art und Weise lange Funktion zu setzen auf mehreren Leitungen telefonieren

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

Ich mag würde es in zwei Linien aufgeteilt, aber ich bin nicht sicher, ob der richtige Weg Mach das in Python?

Danke.

+1

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

+1

Diese Frage unterscheidet sich von der, die Sie als es verwiesen ist keine lange Zeichenfolge. – ensnare

+2

@ensnare: Es gelten die gleichen Regeln. Die akzeptierte Antwort auf diese Frage listet alle möglichen Wege auf, um eine lange Linie in Python aufzulösen. – bernie

Antwort

20

Die Codierungsrichtlinien, die die Länge von Zeilen begrenzen, dienen teilweise dazu, den Code lesbarer zu machen. In Ihrem Fall von verketteten Methodenaufrufen ist die Bedeutung nicht klar. Sie sollten einige temporäre Variablennamen für die Zwischenwerte auswählen, damit ein Leser des Codes die Kette leicht verstehen kann.

Ein Beispiel könnte sein:

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

Dies führt den Leser nach unten einem Garten Weg zum Verstehen. Sehr wenig ist in der Leistung verloren, und der zusätzliche Code wird alle für den Zweck hinzugefügt.

+0

Ich denke, dass Sie eine Invokation auf die '.digest'-Funktion vermissen, aber ansonsten eine sehr gute Antwort. – bcherry

+0

Vielen Dank. Ich habe es repariert. –

+0

Das war wirklich hilfreich. Vielen Dank! – ensnare

3

Bevorzugen Charles Merram die Antwort, aber ich dachte, dies ist bemerkenswert, da Arbeit, aber hässlich und entmutigt. Weil '.' Nachfolgend gearbeitet ist eine lexikalische delimiter,:

>>> '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]' 

aber tun das nicht.

Verwandte Themen