2012-08-12 13 views
9

Sempre chiama la funzione più usiamo incatenati:stile Python per `funzione chained` chiama

value = get_row_data(original_parameters).refine_data(leval=3).transfer_to_style_c() 

Può essere lungo. Per salvare la riga lunga nel codice, che è preferibile?

value = get_row_data(
    original_parameters).refine_data(
    leval=3).transfer_to_style_c() 

o:

value = get_row_data(original_parameters)\ 
     .refine_data(leval=3)\ 
     .transfer_to_style_c() 

mi sento bene di usare backslash \, e mettere .function alla nuova linea. Questo rende ogni chiamata di funzione ha una propria linea, è facile da leggere. Ma questo non sembra preferito da molti. E quando il codice commette errori impercettibili, quando è difficile eseguire il debug, inizio sempre a pensare che potrebbe essere uno spazio o qualcosa dopo lo backslash (\).

Per citare dalla guida Python stile:

linee lunghe possono essere suddivisi su più righe avvolgendo espressioni tra parentesi. Questi dovrebbero essere usati preferibilmente usando una barra rovesciata per la continuazione della linea. Assicurati di indentare la riga continua in modo appropriato. Il posto preferito da rompere attorno a un operatore binario è dopo l'operatore, non prima di esso.

+0

La guida di stile è una * guida *; ignoralo quando non si adatta alla tua situazione attuale. :-) –

+0

Puoi realizzare il tuo secondo esempio con indentazione automatica nella maggior parte degli editor ed evita di usare '\\' - questo sarebbe il mio stile personale - http://pastebin.com/8Ld9sX5G –

+0

Preferisco mettere l'espressione tra parentesi e metodi separati dopo il punto, uno per riga ('function' invece di' .function') – joaquin

risposta

13

tendo a preferire i seguenti, che evita i non-recommended\, grazie ad una parentesi aperta:

value = (get_row_data(original_parameters) 
     .refine_data(level=3) 
     .transfer_to_style_c()) 

Un vantaggio di questa sintassi è che ogni chiamata metodo su una riga.

Un simile tipo di struttura \ -less è spesso utile con le stringhe, in modo che non vanno oltre la raccomandata 79 caratteri per linea limite:

message = ("This is a very long" 
      " one-line message put on many" 
      " source lines.") 

Questa è una singola stringa letterale, che viene creato in modo efficiente dall'interprete Python (questo è molto meglio della somma delle stringhe, che crea più stringhe in memoria e le copia più volte fino a ottenere la stringa finale).

La formattazione del codice Python è piacevole.

+0

curioso sullo stile di indentazione corretto per la continuazione ho trovato la [guida di stile] (https://www.python.org/dev/peps/pep-0008/) – Shanimal

1

Che dire di questa opzione:

value = get_row_data(original_parameters, 
      ).refine_data(leval=3, 
       ).transfer_to_style_c() 

Si noti che le virgole sono ridondanti se non ci sono altri parametri, ma tenerli per mantenere la coerenza.

+0

Questa è una buona alternativa. –

0

Il non citando la mia preferenza (anche se vedere i commenti sulla tua domanda :)) o alternative risposta è:

Stick per le linee guida dello stile su qualsiasi progetto che già hanno - se non dichiarato, quindi tenere come coerente come è possibile con il resto della base di codice in stile.

Altrimenti, scegli uno stile che ti piace e mantieni quello - e fai sapere ad altri in qualche modo è così che apprezzerai le chiamate a funzioni concatenate da scrivere se non sono ragionevolmente leggibili su una sola riga (o comunque desideri descriverlo) .