Perché Python pep-8 consiglia vivamente spazi su tab per il rientro?


146

Vedo su Stack Overflow e PEP 8 che la raccomandazione è di usare spazi solo per il rientro nei programmi Python. Riesco a capire la necessità di un rientro coerente e ho sentito quel dolore.

C'è una ragione di fondo per preferire gli spazi? Avrei pensato che le schede fossero molto più facili da lavorare.


7
Leggi la discussione sulla PEP per sapere.
e-satis,

106
1 livello di rientro è ... 1. È del tutto logico concordare sull'uso di N spazi quando tutti possono usare una singola scheda. Che, a proposito, è esattamente pensato per farlo. Rientro. Una volta. 1 livello di rientro = 1 carattere singolo, ovvero 1 singola scheda. E sono più utili perché ogni programmatore può scegliere liberamente come visualizzarlo. L'uso degli spazi è stupido, non ho mai visto un singolo argomento per questo che non sia stupido.
o0 '.

31
@BlueBomber e perché non costringi le persone ad avere una dimensione del carattere e una combinazione di colori che ti piace, mentre ci sei? Ancora stupido.
o0 '.

10
@BlueBomber no, no, è ESATTAMENTE sullo stesso livello di assurdità.
o0 '.

9
@BlueBomber Qual è esattamente la differenza? Stai riducendo un grado di libertà nella configurazione di un altro sviluppatore del loro ambiente senza ottenere alcun vantaggio evidente. Se vuoi essere un dittatore e forzare tutti a guardare il codice con un rientro corrispondente a 2 o 4 o 29 spazi, puoi ancora farlo con le schede. Basta chiedere ai tuoi underling di impostare il loro IDE per visualizzare le schede corrispondenti al tuo numero preferito di spazi. Se non hai l'autorità per farlo, forse dovresti lasciare che decidano da soli quanto è ampia ai loro occhi un'unità di rientro.
Asad Saeeduddin,

Risposte:


111

La risposta è stata data proprio lì nel PEP [a cura di: questo passaggio è stato pubblicato nel 2013 ]. Quoto:

Il modo più popolare di rientrare in Python è solo con spazi.

Di quale altra ragione di fondo hai bisogno?

Per dirla in modo meno schietto: considera anche il campo di applicazione del PEP come indicato nel primo paragrafo:

Questo documento fornisce convenzioni di codifica per il codice Python che comprende la libreria standard nella distribuzione principale di Python.

L'intenzione è quella di rendere costantemente formattato tutto il codice che va nella distribuzione ufficiale di Python (spero che possiamo concordare sul fatto che questa è universalmente una buona cosa ™).

Poiché la decisione tra spazi e tab per un singolo programmatore è a) davvero una questione di gusti eb) facilmente gestibile con mezzi tecnici (editor, script di conversione, ecc.), C'è un modo chiaro per terminare tutta la discussione: scegline uno .

Fu Guido a scegliere. Non doveva nemmeno fornire una ragione, ma lo faceva ancora facendo riferimento a dati empirici.

Per tutti gli altri scopi puoi prendere questo PEP come una raccomandazione, oppure puoi ignorarlo: la tua scelta, quella della tua squadra, o i tuoi capi squadra.

Ma se posso darti un consiglio: non mescolarli ;-) [ndr: Mescolare schede e spazi non è più un'opzione.]


11
Concordato. La coerenza è più importante delle schede rispetto agli spazi X rispetto agli spazi Y.
Mike Clark,

10
mi chiedo ... perché la libreria standard ha così tanti nomi di metodi mixedCase?
Kyle Wild,

6
@dorkitude: a) nessuno è perfetto. b) ragioni storiche.

8
Allora perché così tanti programmatori hanno scelto di usare gli spazi prima di PEP-8? Questo è quello che voglio davvero sapere. I vantaggi delle schede mi sembrano ovvi, ma non gli spazi.
einnocent


95

Bene, sembra che tutti siano fortemente orientati verso gli spazi. Uso esclusivamente le schede. So benissimo perché.

Le schede sono in realtà una bella invenzione, nata dopo gli spazi. Ti permette di rientrare senza spingere lo spazio milioni di volte o usando una scheda falsa (che produce spazi).

Davvero non capisco perché tutti stiano discriminando l'uso delle schede. È molto simile alle persone anziane che discriminano i giovani per aver scelto una tecnologia più nuova e più efficiente e si lamentano che la composizione a impulsi funziona su tutti i telefoni , non solo su questi nuovi fantasiosi. "La composizione a toni non funziona su tutti i telefoni, ecco perché è sbagliata".

Il tuo editor non è in grado di gestire correttamente le schede? Bene, prendi un editor moderno . Potrebbe essere il momento giusto, siamo nel 21 ° secolo e il tempo in cui un editor era un software complicato ad alta tecnologia è passato da tempo. Ora abbiamo tonnellate e tonnellate di editor tra cui scegliere, tutti quelli che supportano le schede bene. Inoltre, puoi definire quanto dovrebbe essere una scheda, cosa che non puoi fare con gli spazi. Non riesci a vedere le schede? Che cos'è quello per una discussione? Bene, non puoi vedere nemmeno gli spazi!

Posso essere così audace da suggerire di ottenere un editor migliore? Uno di questi ad alta tecnologia, che sono già stati rilasciati circa 10 anni fa, che mostrano personaggi invisibili ? (sarcasmo spento)

L'uso degli spazi provoca molto più lavoro di eliminazione e formattazione. Ecco perché (e tutte le altre persone che lo sanno e sono d'accordo con me) usano le schede per Python.

Mescolare schede e spazi è un no-no e nessun argomento al riguardo. Questo è un casino e non può mai funzionare.


26
Per aggiungere a ciò, dai un'occhiata alla tua tastiera, il simbolo del tasto TAB rappresenta chiaramente il rientro - è lo scopo rientrato del tasto non quello di SPAZIO. PEP8 raccomanda di usare gli spazi è un errore IMHO ma è solo una raccomandazione - en.wikipedia.org/wiki/Tab_character#Tab_characters
Daniel Sokolowski

29
Concordato interamente con questo post. Usare gli spazi è per gli sciocchi che amano farsi inciampare in quegli 1 spazio dagli errori di rientro. Se il rientro fosse disattivato di 1 scheda, ti garantisco che l'avresti notato.
Sepero,

12
@Zingham Nessuno può usare esclusivamente le schede: le schede e gli spazi sono sempre usati in combinazione e questo porta ad un'incoerenza. Io e migliaia di altri li stiamo usando in modo abbastanza coerente ogni giorno. Schede per il rientro, spazi per l'allineamento. Quale parte di questo concetto trovi così terribilmente difficile da comprendere, e perché sei convinto che sia impossibile applicarlo in modo coerente?
antred

1
Il vero problema con le schede è che non è possibile ottenere l'esatto indendimento al carattere raccomandato dallo stesso PEP8 sotto il commento "# Allineato con il delimitatore di apertura". Questo è solo il motivo per preferire gli spazi: per ottenere il rientro corretto!
user541905

2
La domanda è "Perché Python pep-8 raccomanda vivamente di inserire spazi rispetto alle schede per il rientro?" . Questa risposta non menziona mai nulla del PEP8. ||| Invece di provare a rispondere alla domanda ... questa risposta mi viene in mente come un grande condiscendente, principalmente un pezzo di opinione . Ci sono 276 parole usate per dire "le schede sono migliori degli spazi ed ecco perché ...".
Trevor Boyd Smith,

43

Personalmente non sono d'accordo con gli spazi sulle schede. Per me, le schede sono un carattere / meccanismo di layout del documento mentre gli spazi sono per il contenuto o la delimitazione tra i comandi nel caso del codice.

Devo essere d'accordo con i commenti di Jim sul fatto che le schede non sono davvero il problema, sono le persone e come vogliono mescolare schede e spazi.

Detto questo, mi sono costretto a usare gli spazi per motivi di convenzione. Apprezzo la coerenza rispetto alle preferenze personali.


3
Ho cercato di forzarmi a usare anche gli spazi, ma l'editor (almeno Eclipse + PyDev) ha saputo vincere, specialmente se abiliti la visualizzazione di personaggi invisibili. E posso facilmente impostare le schede in modo che siano 4, 8, 6 spazi visivamente. Quindi, nel mio codice, almeno apprezzo le preferenze personali e mi attengo agli spazi se questa è la convenzione stabilita nella base di codice esistente.
Daniel Sokolowski

2
Va bene finché non stai programmando in una squadra. Una volta che sei in una squadra, accetti una singola convenzione e ti attieni.
Soviet

1
@Soviut Mi sembra soprattutto un pio desiderio. In tutte le squadre in cui sia mai stato, la linea ufficiale del partito era "usa gli spazi". La realtà era che praticamente ogni file era un disastro totale di schede e spazi, e anche nei file che utilizzavano costantemente solo spazi o solo schede, il rientro era ancora dappertutto.
antred

Sì, ma è quello che volevo dire. Alla fine viene raggiunto e applicato un certo consenso. Come hai detto, di solito "usa solo spazi".
Soviet

questo è il motivo principale per cui preferisco le schede. Ha senso avere caratteri separati per il layout e la delimitazione delle parole
woojoo666,

31

Il motivo degli spazi è che le schede sono opzionali. Gli spazi sono l'attuale minimo comune denominatore di punteggiatura.

Ogni editor di testo decente ha una "sostituzione di schede con spazi" e molte persone lo usano. Ma non sempre.

Mentre alcuni editor di testo potrebbero sostituire una serie di spazi con una scheda, questo è davvero raro.

Linea di fondo . Non puoi sbagliare con gli spazi. tu potrebbe andare male con le schede. Quindi non utilizzare le schede e ridurre il rischio di errori.


15
Non giurerei mai di fare qualcosa nel modo sbagliato solo perché molti altri (persone, editor di testo, ecc.) Capita anche che siano sbagliati. Nel 2015 un editor di testo che non gestisce bene le schede appartiene al cestino.
antred

2
"Non puoi sbagliare con gli spazi. Potresti sbagliare con le schede". Ho scoperto che è al 100% topsy-turvy errato. Nella mia esperienza: "Non puoi sbagliare con le schede. Potresti sbagliare con gli spazi" ... specialmente quando condividi il codice.
cmroanirgo,

5
Quindi qualcuno l'ha finalmente detto: usa gli spazi perché è il minimo comune denominatore. La stessa regola ci ha permesso di mantenere MBR, BIOS e moduli cartacei negli uffici governativi. Solo che questi hanno effettivamente problemi concettuali, mentre tabs vs space è un problema utente stupido al 100%.
Milind R

1
Questo mi sembra un Argumentum ad populum: argomento fallace che conclude che una proposizione è vera perché molte o la maggior parte delle persone ci crede. Poiché ogni editor può sostituire le schede con spazi, gli spazi sono la scelta giusta è un errore !!
Djunzu,

28

Il problema con le schede è che sono invisibili e le persone non possono mai essere d'accordo sulla larghezza delle schede. Quando mescoli schede e spazi e imposti tabstops su qualcosa di diverso da Python (che utilizza tabstops ogni 8 spazi) vedrai il codice in un layout diverso rispetto a Python. E poiché il layout determina i blocchi, vedrai una logica diversa. Porta a bug sottili.

Se insisti a sfidare PEP 8 e ad usare le tab - o peggio, mescolando tab e spazi - almeno esegui python con l'argomento '-tt', che rende il rientro incoerente (a volte una tab, a volte uno spazio per la stessa rientranza livello) un errore. Inoltre, se possibile, imposta il tuo editor per visualizzare le schede in modo diverso. Ma davvero, l'approccio migliore non è usare le schede, punto.


43
È vero che le schede sono invisibili e le persone non possono concordare sulla larghezza delle schede. Lo stesso vale anche per gli spazi. Quando mescoli schede e spazi, le cose vanno male. Ma perché dai la colpa di quella situazione alle schede e non agli spazi?
Jim,

47
No, lo stesso non vale per gli spazi. Le persone possono concordare sulla larghezza degli spazi.
Rafał Dowgird,

32
Un singolo spazio può sempre avere la stessa larghezza, ma il rientro con gli spazi non è sempre della stessa larghezza. Non riesco a vedere come acconsentire all'uso di tab n spazi ampi sia diverso dal concordare di indentare con n spazi.
Jim,

26
Sì, conosco i problemi che possono causare la miscelazione dei due. Quello che non capisco è il motivo per cui alcune persone danno la colpa alle schede. Il problema è mescolarli, non le schede in particolare. È possibile risolvere il problema sostituendo le schede con spazi, ma è anche possibile risolvere il problema sostituendo gli spazi con schede.
Jim,

70
E no, se uso 8 schede di larghezza e tu usi schede di 6 dimensioni e condividiamo il codice, non si incasina. È solo una singola scheda per l'interprete Python.
Jim,

22

I problemi principali con il rientro si verificano quando si mescolano schede e spazi. Ovviamente questo non ti dice quale dovresti scegliere, ma è una buona ragione per consigliarne uno, anche se lo prendi lanciando una moneta.

Tuttavia, IMHO ci sono alcuni motivi minori per favorire gli spazi rispetto alle schede:

  • Strumenti diversi. A volte il codice viene visualizzato al di fuori dell'editor di un programmatore. Per esempio. pubblicato in un newsgroup o forum. Gli spazi in genere funzionano meglio delle schede qui: ovunque gli spazi si alterano, anche le schede lo fanno, ma non viceversa.

  • I programmatori vedono la fonte in modo diverso. Questo è profondamente soggettivo - è il principale vantaggio delle schede o un motivo per evitarle a seconda di quale parte stai. Tra i lati positivi, gli sviluppatori possono visualizzare la sorgente con il rientro preferito, quindi uno sviluppatore che preferisce il rientro a 2 spazi può lavorare con uno sviluppatore a 8 spazi sulla stessa fonte e comunque vederlo come preferisce. Il rovescio della medaglia è che ci sono ripercussioni su questo - ad alcune persone piace l'8-spazio perché fornisce un feedback molto visibile sul fatto che sono nidificati troppo profondamente - possono vedere il codice controllato dall'intrentatore che si avvolge costantemente nel loro editor. Il fatto che ogni sviluppatore veda il codice nello stesso modo porta a una maggiore coerenza rispetto alle lunghezze delle linee e anche ad altre questioni.

  • Rientro della linea continua. A volte si desidera rientrare in una riga per indicare che è presente nella precedente. per esempio.

    def foo():
        x = some_function_with_lots_of_args(foo, bar, baz,
                                            xyzzy, blah)

    Se si usano le schede, non c'è modo di allinearlo per le persone che usano diversi tabstops nel loro editor senza mescolare spazi e schede. Questo uccide efficacemente il vantaggio di cui sopra.

Ovviamente, però, si tratta di una questione profondamente religiosa, di cui è afflitta la programmazione. Il problema più importante è che dovremmo sceglierne uno, anche se non è quello che preferisci. A volte penso che il più grande vantaggio del rientro significativo sia che almeno ci risparmiamo il posizionamento delle parentesi di fiamma.

Vale anche la pena leggere questo articolo di Jamie Zawinski sull'argomento.


3
L'allineamento è però banale. Uso semplicemente le parentesi come un blocco e indento ogni argomento. Inoltre, nel tuo esempio puoi benissimo usare gli spazi poiché sei all'interno di un elenco di argomenti e puoi impilare tutti gli spazi che desideri.
Soviut,

3
@Soviut: se rientri con gli spazi, l'allineamento viene incasinato non appena viene visualizzato con una dimensione di scheda diversa. L'unico modo per preservarlo è utilizzare le schede a livello di rientro, quindi gli spazi per il resto, ovvero mescolare spazi e schede, il che porta a problemi propri.
Brian,

Sì, è per questo che tendo ad usare semplicemente la convenzione python di blocco del rientro sui miei argomenti comunque. Certo, potrebbero non allinearsi con la parentesi graffa aperta, ma è ancora chiaro a quale linea o comando appartengano. La sintassi di JQuery funziona secondo un principio simile.
Soviet,

2
@Brian: non vedo come ciò possa causare problemi. È esattamente il modo giusto, schede per il rientro, spazi per l'allineamento. Non è affatto lo stesso che mescolare spazi e tab per il rientro .
antred

1
@CoreDumpError Uh no, certamente no. Lo so perché Python 3 non si lamenta mai di nessuno dei miei script e uso le schede per rientro / spazi per allineare tutto il maledetto tempo. Inoltre, PEP8 non può "vietare" nulla, in quanto è semplicemente una raccomandazione (e una habrabra, secondo me).
antred

12

Si noti che l'uso delle schede confonde un altro aspetto di PEP 8:

Limitare tutte le righe a un massimo di 79 caratteri.

Diciamo, ipoteticamente, che usi una larghezza di tabulazione di 2 e io uso una larghezza di tab di 8. Scrivi tutto il tuo codice in modo che le tue righe più lunghe raggiungano 79 caratteri, quindi inizio a lavorare sul tuo file. Ora ho un codice difficile da leggere perché (come afferma il PEP):

Il wrapping predefinito nella maggior parte degli strumenti interrompe la struttura visiva del codice

Se usiamo tutti 4 spazi, è SEMPRE lo stesso. Chiunque il cui editor può supportare una larghezza di 80 caratteri può leggere comodamente il codice. Nota: il limite di 80 caratteri è una guerra santa in sé e per sé, quindi non cominciamo qui.

Qualsiasi editor non sucky dovrebbe avere un'opzione per usare gli spazi come se fossero schede (sia di inserimento che di cancellazione), quindi non dovrebbe essere un argomento valido.


7

La risposta alla domanda è: PEP-8 vuole fare una raccomandazione e ha deciso che, poiché gli spazi sono più popolari, raccomanderà fortemente gli spazi rispetto alle schede.


Note su PEP-8

PEP-8 dice "Usa 4 spazi per livello di rientro".
È chiaro che questa è la raccomandazione standard.

"Per il codice davvero vecchio che non vuoi rovinare, puoi continuare a usare le schede a 8 spazi."
È chiaro che ci sono ALCUNE circostanze in cui è possibile utilizzare le schede.

"Non mescolare mai schede e spazi."
Questo è un chiaro divieto di mescolare - penso che siamo tutti d'accordo su questo. Python può rilevare questo e spesso soffoca. L'uso dell'argomento -tt rende questo un errore esplicito.

'Il modo più popolare di rientrare in Python è solo con spazi. Il secondo modo più popolare è solo con le schede ".
Questo afferma chiaramente che entrambi sono usati. Solo per essere ultra-chiari: non dovresti mai mescolare spazi e tab nello stesso file.

"Per i nuovi progetti, si consiglia vivamente di utilizzare solo spazi rispetto alle schede."
Questa è una chiara raccomandazione e forte, ma non un divieto di schede.


Non riesco a trovare una buona risposta alla mia domanda in PEP-8. Uso le schede, che ho usato storicamente in altre lingue. Python accetta i sorgenti con l'uso esclusivo delle schede. È abbastanza buono per me.

Ho pensato di provare a lavorare con gli spazi. Nel mio editor, ho configurato un tipo di file per utilizzare gli spazi esclusivamente e quindi inserisco 4 spazi se premo tab. Se premo tab troppe volte, devo cancellare gli spazi! Arrgh! Elimina quattro volte di più delle schede! Il mio editor non può dire che sto usando 4 spazi per i rientri (anche se un editor AN potrebbe essere in grado di farlo) e ovviamente insiste sull'eliminazione degli spazi uno alla volta.

Non si potrebbe dire a Python di considerare le tab come n spazi quando si leggono le rientranze? Se potessimo concordare 4 spazi per rientro e 4 spazi per tab e consentire a Python di accettarlo, allora non ci sarebbero problemi.
Dovremmo trovare soluzioni vantaggiose per tutti.


1
Quale editor stai usando? La maggior parte che ho usato ha un'opzione per dedurre sul backspace (ad esempio, emacs si comporta in questo modo), indipendentemente dall'implementazione del rientro.
Brian,

Hai ragione: non vedo un'opzione per dedurre sul backspace, ma probabilmente puoi gestirlo usando shift-tab o ridurre il rientro (ctrl-shift-i di default) invece.
Brian,

Sto solo provando PyScripter che sembra molto meglio nell'utilizzare gli spazi quando premi tab e rimuoverli in 4 quando premi backspace.
Quamrana,

28
"Devo cancellare gli spazi! Arrgh! Quattro volte più cancellazioni delle schede!" - Questa è l'unica ragione per cui utilizzo le schede per tutto e perché penso che le persone che usano gli spazi siano pazze. :) Non ho mai avuto problemi, tranne quando ho incollato qualcosa dal web che utilizza spazi. Quindi una semplice ricerca e sostituzione lo risolve.
Aphex,

3

Ho sempre usato le schede nel mio codice. Detto questo, di recente ho trovato un motivo per utilizzare gli spazi: durante lo sviluppo sul mio tablet Internet Nokia N900, ora avevo una tastiera senza un tasto Tab. Questo mi ha costretto a copiare e incollare le schede o a riscrivere il mio codice con spazi. Ho riscontrato lo stesso problema con altri telefoni. Certo, questo non è un uso standard di Python, ma qualcosa da tenere a mente.


2

JWZ lo dice meglio :

Quando [le persone] leggono il codice e quando hanno finito di scrivere un nuovo codice, si preoccupano di quante colonne dello schermo con cui il codice tende a rientrare quando si apre un nuovo ambito (o sexpr, o altro) ...

... La mia opinione è che il modo migliore per risolvere i problemi tecnici è imporre che il carattere TAB ASCII # 9 non appaia mai nei file su disco: programma il tuo editor per espandere i TAB su un numero appropriato di spazi prima di scrivere le righe sul disco. ..

... Questo presuppone che non usi mai le schede in punti in cui sono effettivamente significative, come nelle costanti di stringhe o caratteri, ma non lo faccio mai: quando importa che sia una scheda, uso sempre "\ t" invece.


10
Farei il contrario: le schede hanno un significato semantico per l'indentazione, quindi è più sensato avere schede memorizzate e spazi visualizzati. L'utente può scegliere uno stile di formattazione e l'editor espande le schede di conseguenza.
AkiRoss,

1
Hai ancora il problema di schede e spazi misti, nonché di un autore che utilizza 1 colonna per scheda e rientra più di 4 volte, il che apparirebbe pazzo in un editor di testo impostato per visualizzare ogni carattere di scheda come 4 colonne di larghezza. Le schede per il rientro hanno più senso in un editor di testo a larghezza variabile, come un elaboratore di testi che utilizza caratteri a spaziatura proporzionale. Non tanto con un editor di testo a larghezza fissa.
Mark Cidade,

2
No, intendevo dire che un editor di testo dovrebbe essere in grado di analizzare la grammatica della lingua e capire quando si verifica una tabulazione, in modo che le schede possano essere utilizzate solo come mezzo di formattazione e non sarebbe necessario utilizzare gli spazi per il rientro. "tab" non deve avere una larghezza fissa e trovo generalmente vergognoso che con le tecniche odierne (ad esempio l'apprendimento automatico), la formattazione sia ancora un problema per i programmatori. Tutto dovrebbe essere automatizzato e dovrebbe essere automatizzato e trasparente.
AkiRoss,

Non vedo come sarebbe in grado di capirlo.
Mark Cidade,

1

Poiché python si basa sul rientro per riconoscere la struttura del programma, è necessario un modo chiaro per identificare l'identificazione. Questo è il motivo per scegliere spazi o schede.

Tuttavia, Python ha anche una forte filosofia di avere un solo modo di fare le cose, quindi dovrebbe esserci una raccomandazione ufficiale per un modo di fare rientro.

Sia gli spazi che le schede rappresentano sfide uniche per un editor da gestire come rientro. La gestione delle schede stesse non è uniforme tra gli editor o le impostazioni dell'utente. Poiché gli spazi non sono configurabili, rappresentano la scelta più logica in quanto garantiscono che il risultato sia uguale ovunque.


8
E poiché anche ogni editore può scegliere la sua combinazione di colori, pensi che dovrebbero imporre anche quale combinazione di colori usare?
o0 '.

8
Sì, ma questa incoerenza non ha davvero più senso? Perché è semplicemente una questione di preferenza visiva. Se preferisco un rientro "dall'aspetto" più ampio nel mio editor, posso impostare le mie schede su 8 spazi, se preferisco di meno, posso impostarlo su 2. In questo modo il codice, senza effettivamente modificare la formattazione, si adatta meglio alla persona che è osservandolo.
Dennmat,

8
Sono d'accordo con dennmat- Se visivamente preferisco 2 spazi e Guido preferisce visivamente 4 spazi, allora la scelta logica è quella di usare il rientro delle tabulazioni.
Sepero,

0

Il vantaggio più significativo che posso dire degli spazi rispetto alle schede è che molti programmatori e progetti usano un determinato numero di colonne per il codice sorgente e se qualcuno commette una modifica con il suo tabstop impostato su 2 spazi e il progetto utilizza 4 spazi come il tabstop delle righe lunghe sarà troppo lungo per la finestra dell'editor di altre persone. Concordo sul fatto che le schede sono più facili da lavorare, ma penso che gli spazi siano più facili per la collaborazione, il che è importante in un grande progetto open source come Python.


2
questo è sbagliato: ciò accade solo se mescoli schede e spazi e lo risolveresti ugualmente costringendo tutti a utilizzare le schede anziché gli spazi.
o0 '.

0

Puoi avere la tua torta e mangiarla. Imposta il tuo editor per espandere automaticamente le schede negli spazi.

(Sarebbe :set expandtabin Vim.)


0

La mia ipotesi è che la maggior parte degli editor di testo di Linux fanno apparire le impostazioni predefinite ridicolmente grandi per impostazione predefinita. Non riesco a pensare a nessun altro buon motivo per usare gli spazi sulle schede.


-1

Oltre a tutti gli altri motivi già citati (coerenza, mai mescolare spazi, tab ecc.) Credo che ci siano alcuni altri motivi per cui la convenzione sui 4 spazi deve essere annotata. Questi si applicano solo a Python (e forse ad altre lingue in cui il rientro ha un significato). Le schede possono essere più belle in altre lingue, a seconda delle preferenze individuali.

  1. Se un editor non mostra le schede (cosa che accade, a seconda della configurazione, in parecchi), un altro autore potrebbe presumere che il tuo codice usi 4 spazi, b / c quasi tutto il codice Python che è disponibile pubblicamente; se lo stesso editor avesse una larghezza di tabulazione di 4, potrebbero accadere cose brutte - almeno, quella povera persona perderà tempo per un problema di rientro che sarebbe stato molto facile evitare attenendosi alla convenzione. Quindi, per me, il motivo numero uno è evitare i bug con coerenza.

  2. Riformulando la questione di quale sia meglio, schede o spazi, ci si dovrebbe chiedere quali siano i vantaggi delle schede; Ho visto molti post elogiare le schede, ma pochi argomenti convincenti per loro; buoni editor come emacs, vi (m), kate, ... fanno il rientro corretto in base alla semantica del tuo codice - anche senza schede; gli stessi editor possono essere facilmente configurati per non rientrare nel backspace ecc.

  3. Alcune persone hanno preferenze molto forti quando si tratta della loro libertà nel decidere l'aspetto / il layout del codice; altri apprezzano la coerenza rispetto a questa libertà. Python riduce drasticamente questa libertà dettando che il rientro viene usato per blocchi ecc. Questo può essere visto come un bug o una funzionalità, ma in qualche modo viene fornito con la scelta di Python. Personalmente, mi piace questa coerenza: quando inizi a scrivere un codice su un nuovo progetto, almeno il layout è vicino a quello a cui sono abituato, quindi è abbastanza facile da leggere. Quasi sempre.

  4. L'uso di spazi per il rientro consente "trucchi di layout" che possono facilitare la comprensione del codice; alcuni esempi sono elencati in PEP8; per esempio.

    foo = long_function_name(var_one, var_two,
                             var_three, var_four)
    
    # the same for lists
    a_long_list = [1,
                   2,
                   # ...
                   79]
    
    # or dictionaries
    a_dict = {"a_key": "a_value",
              "another_key": "another_value"}

    Naturalmente, anche quanto sopra può essere scritto bene

    foo = long_function_name(
        var_one, var_two,
        var_three, var_four)
    
    # the same for lists
    a_long_list = [
        1,
        2,
        # ...
        79]
    
    # or dictionaries
    a_dict = {
        "a_key": "a_value",
        "another_key": "another_value"}

    Tuttavia, quest'ultimo richiede più righe di codice e talvolta si ritiene che meno righe siano migliori (b / c si ottiene di più su una singola schermata). Ma se ti piace l'allineamento, gli spazi (preferibilmente assistiti da un buon editor) ti danno, in un certo senso, più libertà in Python rispetto alle schede. [Beh, immagino che alcuni editor ti permettano di fare lo stesso w / tab;) - ma con spazi, tutti fanno ...]

  5. Tornando allo stesso argomento di tutti gli altri - PEP 8 detta (ok, raccomanda vivamente) gli spazi. Se stai arrivando a un progetto che utilizza solo schede, ovviamente, hai poca scelta. Ma a causa dell'istituzione delle convenzioni PEP 8, quasi tutti i programmatori Python sono abituati a questo stile. Questo rende molto più facile trovare un consenso su uno stile che è accettato dalla maggior parte dei programmatori ... e avere persone d'accordo sullo stile potrebbe essere molto difficile altrimenti.

  6. Gli strumenti che aiutano a rafforzare lo stile sono generalmente consapevoli di PEP 8 senza ulteriore sforzo. Questo non è un grande motivo, ma è bello avere cose funzionanti ~ fuori dalla scatola.


-3

Il problema universale con le schede è che possono essere rappresentate in modo diverso in ambienti diversi.
In un determinato editor, una scheda potrebbe essere 8 spazi o potrebbe essere 2.
In alcuni editor, puoi controllarlo, mentre in altri no.

Un altro problema con le schede è il modo in cui sono rappresentate nell'output stampato. Credo che la maggior parte delle stampanti interpreti una scheda come 8 spazi.

Con gli spazi, non c'è dubbio. Tutto andrà come previsto dall'autore.


14
Un altro che ha fondamentalmente frainteso la scheda ... prendi una macchina da scrivere meccanica e giocaci per un po ', davvero! 1 scheda non è uguale a 8 spazi! è uguale a up_to_8_spaces ! otoh: con i caratteri proporzionali, le schede sono le uniche modo per garantire l'allineamento.

3
"In un determinato editor, una scheda potrebbe essere 8 spazi o potrebbe essere 2". Se mi piacciono i 4 spazi e il mio amico mi piacciono gli 8 spazi o i 2 spazi o i 3 spazi o, ecc. Quindi possiamo entrambi essere d'accordo sulle schede perché (essendo caratteri di rientro dedicati ,) l'editor sa cosa sono e possono visualizzarli di conseguenza. Vedo il codice con rientri di 4 spazi, lo vedi con rientri di 8 spazi, il nostro strano amico usa i suoi 3 spazi e tutto va bene. Le circostanze (specialmente in Python!) In cui la larghezza della scheda stessa avrebbe mai importanza sono così rare che anche i proponenti dello spazio raramente le sollevano.
JamesTheAwesomeDude

-4

Sulla discussione tra Jim e Thomas Wouters nei commenti.

Il problema era ... dato che la larghezza delle schede e degli spazi può variare - e poiché i programmatori non possono concordare su nessuna delle due larghezze - perché le schede hanno la colpa.

Sono d'accordo con Jim su questo: le schede NON sono malvagie in sé e per sé. Ma c'è un problema...

Con gli spazi posso controllare come "IL MIO CODICE PROPRIO" aspetto di in OGNI editor del mondo. Se uso 4 spazi, quindi indipendentemente dall'editor in cui apro il mio codice, avrà la stessa distanza dal margine sinistro. Con le schede sono in balia dell'impostazione della larghezza della scheda per l'editor - anche per IL MIO CODICE. E non mi piace.

Quindi, mentre è vero che anche gli spazi non possono garantire coerenza - almeno ti offrono un maggiore controllo sull'aspetto del tuo codice OWN ovunque - qualcosa che le schede non possono.

Penso che NON sia la coerenza nei programmatori che scrivono il codice - ma la coerenza negli editor che mostrano quel codice - che gli spazi rendono più facile da raggiungere (e imporre).


6
Sei "in balia dell'impostazione della larghezza della scheda per l'editor"? Se il tuo editor non ti consente di impostare la larghezza della scheda desiderata, potresti utilizzare notepad.exe
user137369

4
@zigg Questo è assolutamente irrilevante per l'argomento, dal momento che lui (lei?) parla specificamente del proprio codice (che le informazioni sono persino in grassetto, in corsivo e tutto in maiuscolo). In nessun luogo della discussione è rilevante la condivisione del codice.
user137369

1
Gli editor non sono gli unici strumenti con cui visualizzare il codice. Ci sono anche diff, traceback, Github e altre pagine web, e così via che sceglieranno una larghezza di tabulazione fuori dal tuo controllo (probabilmente 8).
RemcoGerlich,

Vedo il tuo punto. In effetti controlli come tutti vedono il tuo codice (per quanto riguarda il rientro). Il prossimo passo è controllare il tipo di carattere e la colorazione che tutti useranno per vedere il tuo codice. Successivamente, sei pronto a dominare il mondo stesso e non solo i redattori di codice !!
Djunzu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.