Raccomandazioni per l'unione implicita contro esplicita


9

Vorrei conoscere i consigli su Implicing Line Joining vs Explicit Line Join in Python.

In particolare, preferisci una forma rispetto all'altra? Cosa mi consigliate come predefinito generale? Quali criteri hai per scegliere l'uno rispetto all'altro e se hai una preferenza su uno, quando fai eccezioni per l'altro?

Ho una risposta in mente per questa domanda che riflette i miei pregiudizi, ma prima di pubblicare la mia risposta vorrei sapere cosa pensano gli altri ... e se puoi avere un set di criteri migliore di quello che ho in mente, allora accetterò sicuramente la tua risposta sulla mia.

Alcune delle raccomandazioni possono essere generalizzate a questa scelta in altri linguaggi di programmazione, ma il mio pregiudizio è un po 'più forte in Python a causa di alcune caratteristiche specifiche del linguaggio, quindi mi piacerebbe conoscere sia il ragionamento generale che quello su Python avere su questo argomento.

Per alcuni retroscena, la discussione si è svolta attorno a una particolare domanda su StackOverflow , ma ho pensato che fosse più appropriato spostare la discussione qui come una domanda per evitare di ingombrare la risposta su SO con questa tangente poiché è andata fuori tema da la domanda originale. Puoi guardare quella domanda e le sue risposte per gli snippet di codice di esempio che hanno avviato la discussione.

Ecco un esempio semplificato:

join_type = "explicit"
a = "%s line joining" \
    % (join_type)
# versus
join_type = "implicit"
b = ("%s line joining"
     % (join_type))

Le domande sulle best practice sono fuori tema per la revisione del codice. Ho trasferito la tua domanda in una sede migliore.
Winston Ewert,

1
@WinstonEwert prima di pubblicare ho dato una buona occhiata alle Domande frequenti su CodeReview e alle Domande frequenti sui programmatori , e ho scelto CodeReview perché esplicitamente afferma che i tipi di domande da porsi includono "Best practice e utilizzo del modello di progettazione nel codice". Ho incluso una versione semplificata del codice in questione, quindi come è fuori tema?
aculich,

@WinstonEwert Ho pubblicato una domanda su Meta per chiarire le FAQ di CodeReview se ti interessa commentare laggiù.
aculich,

Risposte:


8

Esiste un documento di stile di codifica chiamato PEP8. Si sconsiglia di utilizzare \<NL>ovunque sia possibile utilizzare le parentesi.

Il modo preferito di avvolgere le linee lunghe è usare la continuazione di linea implicita di Python tra parentesi, parentesi e parentesi graffe. Le linee lunghe possono essere spezzate su più linee avvolgendo le espressioni tra parentesi. Questi dovrebbero essere usati preferibilmente all'utilizzo di una barra rovesciata per la continuazione della linea. Assicurati di indentare la linea continua in modo appropriato. Il posto preferito per rompere un operatore binario è dopo l'operatore, non prima di esso.

Testo completo: http://www.python.org/dev/peps/pep-0008/ (sezione Layout del codice)

Non è obbligatorio ma definisce buone pratiche accettabili che sono particolarmente utili se hai più committer Python nella tua squadra.


1

Tendo a utilizzare il join di riga implicito perché lo trovo più leggibile e il supporto da parte degli editor è generalmente migliore per quanto riguarda il rientro e l'evidenziazione dell'intera espressione grazie alla corrispondenza tra parentesi.


0

Al momento preferirei

join_type = "kiding"
a = "%s line joining" % (join_type)

B-))

.

Tendo a preferire l'adesione a linee esplicite perché non mi piace il disordine delle parentesi alla fine delle espressioni.
Ma mi piace l'implicito Linee di giunzione per ridurre la larghezza occupata dalla scrittura di una stringa.
Quindi in alcuni casi, sono imbarazzato di non mescolare i due modi


1
A parte gli scherzi, non mi piace unirmi esplicito perché richiede una maggiore digitazione ed è difficile mantenere tutte le barre rovesciate ordinatamente allineate quando il codice viene modificato.
martineau,

apparentemente @eyquem non ha mai scritto alcun LISP ...
cowbert,
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.