2012-11-21 13 views
14

Mi piacciono molto gli standard di stile seguenti, come quelli specificati in PEP 8. Ho un linter che lo controlla automaticamente, e sicuramente il mio codice è molto migliore proprio per questo.Python allineamento delle assegnazioni (stile)

C'è solo un punto in PEP 8, l'E251 & E221 non si sente molto bene. Venendo da un background di JavaScript, che ho usato per allineare le assegnazioni di variabili come segue:

var var1  = 1234; 
    var2  = 54; 
    longer_name = 'hi'; 

var lol = { 
    'that'  : 65, 
    'those'  : 87, 
    'other_thing' : true 
}; 

E a mio modesto parere, questo migliora la leggibilità in modo drammatico. Il problema è che questo è dis-consigliato da PEP 8. Con dizionari, non è poi così male, perché gli spazi sono consentiti dopo i due punti:

dictionary = { 
    'something':  98, 
    'some_other_thing': False 
} 

posso "dal vivo" con le assegnazioni delle variabili senza allineamento, ma quello che ho don' t come a tutti non è quello di essere in grado di passare argomenti con nome in una chiamata di funzione, in questo modo:

some_func(length=  40, 
      weight=  900, 
      lol=   'troll', 
      useless_var= True, 
      intelligence=None) 

Quindi, quello che finisce per fare sta usando un dizionario, come segue:

specs = { 
    'length':  40, 
    'weight':  900, 
    'lol':   'troll', 
    'useless_var': True, 
    'intelligence': None 
} 

some_func(**specs) 

o semplicemente si mply

some_func(**{'length':  40, 
      'weight':  900, 
      'lol':   'troll', 
      'useless_var': True, 
      'intelligence': None}) 

Ma ho la sensazione che questo lavoro intorno è solo peggio ignorando il PEP 8 E251/E221.

Qual è la migliore pratica?

EDIT molti anni dopo

Non allineare. Prima o poi una nuova variabile che è più lunga arriverà e dovrai colpire la barra spaziatrice qua e là per un po 'finché tutto sarà di nuovo bello. Non ne vale la pena.

+11

La procedura consigliata è seguire PEP 8. Abituarsi a non allineare gli operatori di assegnazione ei valori del dizionario. La tua modesta opinione può facilmente cambiare se sottoposta a lavorarci ogni giorno. – delnan

+0

Sei in grado di passare argomenti per nome in Javascript? Allora, perché dovresti fare questa cosa orribile? – jadkik94

+0

In JS è buona norma passare un oggetto di specifiche anziché 15 argomenti ordinati. Douglas Crockford dixit, e sono assolutamente d'accordo. – bgusach

risposta

13

La best practice è soggettiva, ma la pratica più comune è quella di attenersi a PEP8.

Non consiglio assolutamente di creare dizionari ogni volta che si desidera chiamare una funzione con argomenti denominati. Questo è abbastanza dispendioso. Non vedo perché la tua chiamata originale some_func non funzionerà. Sbaglio definitivamente le mie chiamate di funzione in linee se diventano troppo lunghe e poco maneggevoli. Ma non li allineo. Immagino che il motivo della raccomandazione sia perché può diventare un enorme dolore mantenere correttamente tutta la spaziatura nel tempo, e il consenso è stato mantenibilità rispetto al guadagno in termini di bellezza.

Se stai lavorando sul tuo codice, allinei, chi se ne frega? PEP8 è una linea guida, non una legge.

+1

Hai ragione in alcuni punti, ma beh ... per fortuna il mio IDE si allinea automaticamente in base a un carattere speciale ":", "=" ecc. Non ci vuole molto tempo per mantenerlo "carino". Per me la manutenzione riguarda anche la lettura veloce e confortevole. – bgusach

+0

Quindi modificare le impostazioni dell'IDE o continuare l'allineamento. Sembra una vittoria per me :) – acjay

+0

La migliore risposta. Finché codice da solo, cambierò leggermente gli standard per migliorare (soggettivamente) la leggibilità :) – bgusach

2

Quindi, quello che finisce per fare sta usando un dizionario, come segue:

specs = { 
    length:  40, 
    weight:  900, 
    lol:   'troll', 
    useless_var: True, 
    intelligence:None 
} 

IMHO - questo è meno leggibile (fosse esso sintassi valida senza citare le chiavi), e se io capita di voler aggiungere some_longer_named_varible, non sono proprio sicuro di voler mettere a tacere il re-spaziamento di tutto il resto.

Penso che dovresti mordere il proiettile, temo.

+0

Ho appena corretto l'errore di battitura dei valori chiave. È vero che se qualche nome var è molto lungo, l'allineamento può creare confusione. In quei rari casi, ho appena dichiarato quel nome lungo nell'ultima posizione e senza allineamento. Ma per me, la leggibilità è migliorata nella maggior parte dei casi, gli occhi sanno dove guardare. – bgusach

+0

Mi piacciono i compiti che sono ragionevolmente vicini, ma non mi dilungherò con enormi spazi brutti per ospitare un ragazzo lungo. La maggior parte allineata è meglio di un pasticcio confuso. E se qualche secondo in più qua e là tra le ore è il prezzo della soddisfazione personale e del codice bello, questo è un prezzo che sono più che disposto a pagare. –

1

Raccomanderei di attenersi a PEP8.Cosa succede se hai bisogno di cambiare il nome di una delle tue variabili? Uno strumento di refactoring automatizzato cambierà questo:

var1  = 1234 
var2  = 54 
longer_name = 'hi' 

a questo:

var1  = 1234 
var2  = 54 
even_longer_name = 'hi' # not aligned any more! 

si finirà per fare più lavoro per te per mantenere le cose allineate.

+1

L'editor che uso per scrivere il codice allinea automaticamente il codice con una semplice sequenza di tasti. Quindi, non è un grosso problema. L'unico problema è rappresentato da variabili troppo lunghe, ma in quei casi, non allineare l'assegnazione e, se possibile, inserirla nell'ultima posizione. – bgusach

+0

@ ikaros45: la linea di fondo è che si tratta di una scelta personale. Se sei l'unica persona che leggerà il tuo codice, fai quello che ti piace di più e non sentirti troppo legato da guide di stile come PEP8. Al contrario, se stai scrivendo codice come parte di un team, è importante attenersi a qualsiasi guida di stile concordata dal team, in modo da non far incazzare tutti quelli che devono leggere il tuo codice. –

+0

Se vuoi la mia opinione, preferisco lo stile non allineato, come raccomanda PEP8. Trovo che l'occhio tende a perdersi passando da un lato all'altro di quella voragine di spazi bianchi all'altro. Come quando leggi la pagina dei contenuti di un libro in cui i titoli dei capitoli sono separati dai numeri di pagina. –

Problemi correlati