Domanda

Ho una lunga riga di codice che voglio suddividere su più righe.Cosa uso e qual è la sintassi?

Ad esempio, aggiungendo un gruppo di stringhe,

e = 'a' + 'b' + 'c' + 'd'

e disponilo in due righe come questa:

e = 'a' + 'b' +
    'c' + 'd'
È stato utile?

Soluzione

Qual è la linea?Puoi semplicemente avere argomenti nella riga successiva senza problemi:

a = dostuff(blahblah1, blahblah2, blahblah3, blahblah4, blahblah5, 
            blahblah6, blahblah7)

Altrimenti puoi fare qualcosa del genere:

if a == True and \
   b == False

Controlla il guida di stile per maggiori informazioni.

Dalla tua riga di esempio:

a = '1' + '2' + '3' + \
    '4' + '5'

O:

a = ('1' + '2' + '3' +
    '4' + '5')

Tieni presente che la guida di stile dice che è preferibile utilizzare la continuazione implicita con le parentesi, ma in questo caso particolare aggiungere semplicemente parentesi attorno all'espressione è probabilmente la strada sbagliata da percorrere.

Altri suggerimenti

Da Guida di stile per il codice Python:

Il modo preferito per racchiudere le righe lunghe è utilizzare la continuazione implicita della riga di Python all'interno di parentesi graffe. Le righe lunghe possono essere suddivise su più righe racchiudendo le espressioni tra parentesi.Questi dovrebbero essere usati preferibilmente piuttosto che usare una barra rovesciata per la continuazione della riga.

Le barre rovesciate possono essere ancora appropriate a volte.Ad esempio, le istruzioni with lunghe e multiple non possono utilizzare la continuazione implicita, quindi le barre rovesciate sono accettabili:

with open('/path/to/some/file/you/want/to/read') as file_1, \
        open('/path/to/some/file/being/written', 'w') as file_2:
    file_2.write(file_1.read())

Un altro caso simile è quello delle dichiarazioni assert.

Assicurati di rientrare adeguatamente la riga continua.Il posto preferito per aggirare un operatore binario è Dopo l'operatore, non prima.Qualche esempio:

class Rectangle(Blob):

    def __init__(self, width, height,
                 color='black', emphasis=None, highlight=0):
        if (width == 0 and height == 0 and
                color == 'red' and emphasis == 'strong' or
                highlight > 100):
            raise ValueError("sorry, you lose")
        if width == 0 and height == 0 and (color == 'red' or
                                           emphasis is None):
            raise ValueError("I don't think so -- values are %s, %s" %
                             (width, height))
        Blob.__init__(self, width, height,
                      color, emphasis, highlight)

MODIFICARE:PEP8 ora consiglia il convenzione opposta (per interrompere le operazioni binarie) utilizzato dai matematici e dai loro editori per migliorare la leggibilità.

Lo stile di rottura di Donald Knuth Prima un operatore binario allinea gli operatori verticalmente, riducendo così il carico di lavoro dell'occhio nel determinare quali elementi vengono aggiunti e sottratti.

Da PEP8:Una riga dovrebbe interrompersi prima o dopo un operatore binario?:

Donald Knuth spiega la regola tradizionale nella sua serie Computers and Typesetting:"Sebbene le formule all'interno di un paragrafo si interrompano sempre dopo le operazioni e le relazioni binarie, le formule visualizzate si interrompono sempre prima delle operazioni binarie"[3].

Seguendo la tradizione matematica di solito si ottiene un codice più leggibile:

# Yes: easy to match operators with operands
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

Nel codice Python è consentito interrompere prima o dopo un operatore binario, purché la convenzione sia coerente localmente.Per il nuovo codice si suggerisce lo stile di Knuth.

[3]:The TeXBook di Donald Knuth, pagine 195 e 196

Il pericolo nell'usare una barra rovesciata per terminare una riga è che se viene aggiunto uno spazio dopo la barra rovesciata (che, ovviamente, è molto difficile da vedere), la barra rovesciata non fa più quello che pensavi che fosse.

Vedi Idiomi e anti-idiomi Python (per Pitone 2 O Pitone 3) per più.

Metti un \ alla fine della riga o racchiudi la dichiarazione tra parentesi ( .. ).Da IBM:

b = ((i1 < 20) and
     (i2 < 30) and
     (i3 < 40))

O

b = (i1 < 20) and \
    (i2 < 30) and \
    (i3 < 40)

Puoi spezzare le righe tra parentesi graffe.Inoltre, puoi aggiungere il carattere barra rovesciata \ a una riga per interromperla esplicitamente:

x = (tuples_first_value,
     second_value)
y = 1 + \
    2

Dalla bocca del cavallo: Uning esplicito della linea

Due o più linee fisiche possono essere unite in linee logiche usando i caratteri di backslash (\), come segue:Quando una linea fisica termina in una retroscena che non fa parte di una stringa letterale o un commento, è unita alla seguente forma di una singola linea logica, eliminando la retromarcia e il seguente carattere di fine linea.Per esempio:

if 1900 < year < 2100 and 1 <= month <= 12 \
   and 1 <= day <= 31 and 0 <= hour < 24 \
   and 0 <= minute < 60 and 0 <= second < 60:   # Looks like a valid date
        return 1

Una riga che termina in una retromarcia non può portare un commento.Una retroscena non continua un commento.Una retromarcia non continua un token ad eccezione dei letterali di stringa (cioè, i token diversi dai letterali di stringa non possono essere divisi su linee fisiche usando una retromarcia).Una rovesciamento è illegale altrove su una linea fuori da una corda letterale.

Potrebbe non essere il modo Python, ma generalmente utilizzo l'elenco con la funzione join per scrivere una stringa lunga come le query SQL.

query = " ".join([
    'SELECT * FROM "TableName"',
    'WHERE "SomeColumn1"=VALUE',
    'ORDER BY "SomeColumn2"',
    'LIMIT 5;'
])

Tratto da Guida a Python per gli autostoppisti (Continuazione della linea):

Quando una riga logica di codice è più lunga del limite accettato, è necessario suddividerla su più righe fisiche.L'interprete Python unirà righe consecutive se l'ultimo carattere della riga è una barra rovesciata.Questo è utile in alcuni casi, ma di solito dovrebbe essere evitato a causa della sua fragilità:uno spazio bianco aggiunto alla fine della riga, dopo la barra rovesciata, interromperà il codice e potrebbe avere risultati imprevisti.

Una soluzione migliore è usare le parentesi attorno ai tuoi elementi. Lasciato con una parentesi aperta alla fine della riga, l'interprete Python si unirà alla riga successiva finché le parentesi non saranno chiuse.Lo stesso comportamento vale per le parentesi graffe e quadre.

Tuttavia, il più delle volte, dover dividere una lunga linea logica è un segno che stai cercando di fare troppe cose contemporaneamente, il che potrebbe ostacolare la leggibilità.

Detto questo, ecco un esempio relativo alle importazioni multiple (quando si supera limiti di linea, definiti su PEP-8):

from app import (
    app, abort, make_response, redirect, render_template, request, session
)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top