2009-07-14 5 views
48

Mentre la codifica python che sto utilizzando solo 2 spazi per il rientro, assicurarsi PEP-8 davvero consigliare di avere 4 spazi, ma storicamente per me è insolito.Python: utilizzando 4 spazi per il rientro. Perché?

Così, qualcuno può convincermi di usare 4 spazi invece di 2? Quali sono i pro e i contro?

P.S. E infine, qual è il modo più semplice per convertire tutte le codebase esistenti da 2 spazi a 4 spazi?


P.P.S. PEP-8 raccomanda anche di non usare tab per l'indentazione. read here


Quindi, per riassumere:

Pro:

  • avere più spazio per organizzare quando wraping stringa di lunghezza superiore a 80 linee.
  • È possibile copiare il codice da frammenti e funziona correttamente.

Contro:

  • Con livello più profondo di istruzioni nidificate si dispone di meno spazio per il codice vero e proprio.

Grazie.

+6

Vorresti rendere questo un wiki della comunità o questo probabilmente si chiuderà. Questo è un argomento molto discutibile su cui ognuno ha la propria opinione. – MitMaro

+0

@MitMaro: sono d'accordo sul fatto che questo è altamente soggettivo; anche se vale la pena notare che la P.S. parte è una domanda valida. – DrAl

+0

@AI: avrebbero dovuto essere due domande separate – MitMaro

risposta

79

Tutti gli altri utenti utilizzano 4 spazi. Questa è l'unica ragione per utilizzare 4 spazi che ho incontrato e accettato. Nel mio cuore, voglio ancora usare le tabulazioni (1 indentazione per trattino, ha senso, no? Rientro separato da altri spazi bianchi. Non mi interessa che le schede possano essere visualizzate come larghezza diversa, che non fa differenza sintattica. Il peggio che può accadere è che alcuni dei commenti non si allineano. L'horror!) Ma ho accettato che dal momento che la comunità Python nel suo complesso utilizza 4 spazi, io uso 4 spazi. In questo modo, posso assemblare il codice da frammenti che altri hanno scritto e tutto funziona.

+2

Penso che intendessi 4 spazi, non 4 schede;) – fortran

+0

d'oh. Fisso. :) – Markus

+17

"In questo modo, posso assemblare il codice da frammenti che altri hanno scritto, e tutto funziona ..." E sembra e si sente come _my_ codice :) – xtofl

4

Se sei l'unico coder lavorando sul file sorgente e non ci sono standard di codifica che applicano uno stile particolare, usare quello sei a tuo agio con. Personalmente (e in linea con il nostro standard di codifica), utilizzo le schede rigide in modo che chiunque stia guardando il codice possa utilizzare le proprie preferenze.

di fare un cambiamento, è sufficiente modificare tutti gli spazi di start-of-line a quelli che sono due volte più grande. Ci sono molti modi per farlo; nell'editor di testo Vim, mi vengono in mente due: in primo luogo:

:%s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2) 

Questa è una semplice espressione regolare che cerca una o più coppie di spazi all'inizio della riga e li sostituisce con il doppio dei posti come sono stati trovati Esso può essere esteso a fare tutte file aprendo vim con:

vim *.py 

(o equivalente), seguita da (non testata):

:argdo %s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2)/ | w 

alternativa:

" Switch to hard tabs: 
:set noexpandtab 
" Set the tab stop to the current setting 
:set tabstop=2 
" Change all spaces to tabs based on tabstop 
:retab! 
" Change the tab stop to the new setting 
:set tabstop=4 
" Go back to soft tabs 
:set expandtab 
" Replace all the tabs in the current file to spaces 
:retab 

Naturalmente , molti altri strumenti offrirà caratteristiche simili: sarei sorpreso se qualcosa di simile sed, awk, perl o python non poteva fare questo molto e asily.

2

standard Identation e lo stile generale di codifica variano da lingua a lingua, progetto a progetto. C'è una ragione per l'adozione di uno standard di stile di codifica: in modo che il codice sia uniforme, indipendentemente da chi lo ha scritto. Ciò migliora la leggibilità nel progetto e, per dirla senza mezzi termini, sembra migliore.

C'è una ragione che non è valida quando si adotta uno standard di stile di codifica: perché ti piace. Gli standard di codifica esistono proprio perché le preferenze delle persone variano e, se lasciati soli, ne conseguirebbe il caos, a scapito di tutti.

Se stai scrivendo il codice per te solo, che nessuno leggerà mai, vai avanti e scrivilo come preferisci. Altrimenti, seguendo lo standard accettato della tua comunità, il tuo codice diventerà molto più gradevole agli occhi di tutti. E ricorda anche che se decidi di contribuire con il codice a una community in futuro, avrai un tempo più facile se sei già abituato al loro stile di codifica.

Per quanto riguarda la modifica della dimensione scheda, ci sono molti formattatori codice sorgente là fuori che supportano Python, e gli editori e IDE più del programmatore hanno anche questa capacità. Probabilmente lo hai già, è solo questione di consultare la documentazione per l'editor che stai utilizzando.

11

Non esiste una rientranza "migliore". È un argomento religioso di guerra santa. Quattro sono carini perché sono sufficienti a rendere chiara la rientranza, ma non tanto che l'intero schermo è per lo più spazi bianchi e devi scorrere orizzontalmente per leggere la metà del programma.

Ha anche il vantaggio di essere una "mezza scheda" con la definizione storica di una "scheda".

Oltre a ciò, usa quello che piace al tuo gruppo. È come il cioccolato contro la vaniglia.

Un modo semplice per passare è utilizzare un editor con supporto per schede e spazio. Converti tutte le schede spazio iniziali in schede, imposta le dimensioni della scheda su quattro e quindi converti le schede iniziali in schede spazio.

Abbastanza facile da fare anche con uno script Python. Contate tutti gli spazi iniziali, quindi aggiungete lo stesso importo all'inizio della riga e riscrivetelo.

+0

Abbiamo fatto la stessa cosa in Emacs. In questo modo i programmatori potevano vedere la spaziatura che preferivano senza forzarla sul resto del gruppo. –

7

Il PEP non è il capo di voi. Se è già consistentemente indentato in 2 spazio, non c'è motivo di cambiare tutto il codice per conformarsi ad esso. Potresti seguirlo andando avanti se pensi davvero che sia così vitale, ma, francamente, non lo so. È meglio andare con qualsiasi convenzione che fornisce (e ai tuoi colleghi) il massimo del comfort sia in lettura che in scrittura.

26

Penso che la vera domanda è perché spazi e non tab.

schede sono chiaramente migliore:

  • Si rende quasi impossibile avere incoerente rientro (ho visto codice che normalmente ha 4 posti trattini, ma poi alcune parti capita di essere uno spazio di tutto, è difficile da capire con una semplice ispezione se ci sono 7 o 8 spazi ... Ciò non accadrebbe con le schede, a meno che non si imposta il tabstop su 1 spazio).
  • Tab è una logica semantica rappresentazione per l'indentazione, permette (e qualsiasi altro sviluppatore) di scegliere di visualizzazione il maggior numero di "spazi" (o meglio le colonne) che si desidera senza fare confusione con le preferenze di altre persone.
  • È anche meno tasti da premere se ti capita di avere solo "blocco note" (o un altro editor fittizio) a portata di mano.
  • L'aggiunta e la rimozione di schede è un'operazione simmetrica. La maggior parte degli IDE può inserire automaticamente 4 spazi quando si preme il tasto tab, ma in genere rimuovono solo 1 spazio quando si preme backspace (l'operazione unindent è ancora accessibile come shift-tab, ma questa è una combinazione di due tasti) o si usa il mouse per fare clic nel mezzo del rientro e cancella un personaggio.
  • Sono necessari solo 1 byte anziché 4 (moltiplicare per migliaia di linee e di risparmiare pochi KB: p)
  • Hai una cosa in meno a stabilirsi un accordo, perché se si decide di andare per gli spazi, quindi la discussione ricomincia a scegliere quanti (anche se il consenso sembra essere intorno alle quattro).

Vantaggi di spazi:

  • Guido piacciono.
  • Non è possibile digitare facilmente una scheda qui, trasferisce lo stato attivo (anche se è possibile incollarne uno).
+2

Mi piace il modo in cui hai detto che trasferisce la messa a fuoco. –

0

utilizzando 4 spazi o 2 spazi è interamente a tua scelta. 4 spazi è solo una convenzione. Ciò che è più importante, non combinare schede e spazi. Usa la barra spaziatrice

6

Qualsiasi editor decente (emacs, vim) estrae per te tutta questa assurdità. Funzionerà altrettanto bene con spazi o tabulazioni e può essere configurato per utilizzare qualsiasi numero di spazi (o qualsiasi numero di larghezze di spazio per un carattere di tabulazione). Può anche convertire tra i diversi formati senza troppi problemi (vedere il comando :retab in vim).

Se si sta tentando di convertire la formattazione di origine in blocco, si consiglia di dare un'occhiata all'utilità indent.

Detto questo, non posso resistere a rispondere all'altra domanda ... La mia preferenza è sempre stata per le schede, poiché ignora l'intero problema e tutti possono visualizzare il codice sorgente con le larghezze impostate come meglio credono. È anche molto meno la digitazione quando si lavora in editor che non sono utili per la conversione. Per quanto riguarda 2 vs 4 spazi, è puramente cosmetico.

2

Un motivo è che se si utilizzano meno spazi per il rientro, sarà possibile annidare più istruzioni (poiché la lunghezza della linea è normalmente limitata a 80).

Ora sono abbastanza sicuro che alcune persone non sono d'accordo su quanti costrutti nidificati dovrebbero essere il massimo.

55

Mi piace il fatto che quattro caratteri spaziali rientrino perfettamente nel codice interno di una funzione, poiché def + uno spazio crea quattro caratteri.

def·foo(): 
····pass 
5

anche uno dei motivi è: quando si ha qualche linea lunga (più di 80 simboli) e vuole dividere in 2 si avrà solo 1 posto per il rientro, che è un po 'di confusione:

if code80symbolslong and somelongvariablegoeshere and somelongerthan80symbols \ 
and someotherstatementhere: 
    # some code inside if block 
    pass 

if code80symbolslong and somelongvariablegoeshere and somelongerthan80symbols \ 
    and someotherstatementhere: 
    # some code inside if block 
    pass 
+2

Non dovresti farlo. Se la tua indentazione è di 4 spazi, non dovresti mai avere rientri di meno. A mio parere, la linea "and" dovrebbe essere rientrata di uno o due livelli rispetto alla linea "if". – TimK

1

Se si desidera scrivere codice Python insieme ad altri programmatori diventa un problema se si utilizza un indention diverso come loro. La maggior parte dei programmatori Python tende a utilizzare l'induzione a 4 spazi.

1

È più facile identificare visivamente blocchi di codice lunghi nidificati con 4 spazi. Risparmia tempo durante il debug.

+0

concordato. Per un linguaggio come C preferirei usarne due, in realtà, ma in C l'indizio visivo fornito da indentazione è meno importante di quanto non lo sia in Python. – user1071847