2013-04-18 18 views
13

Ho un riga di codice in Python come questo:Come rompere un lungo con la dichiarazione in python

with long_name_function(p) as a, other_long_name_function(): 

e voglio romperlo in più righe, perché è troppo lungo, ho potuto utilizzare barre rovesciate, ma sono considerati una cattiva pratica. Potrei anche usare contextlib.nested, ma è deprecato, c'è qualche altra alternativa?

+4

barre rovesciate non sono considerate cattive pratiche, è preferibile utilizzare parentesi o virgole per suddividere il codice in linee diverse quando possibile. – jamylak

risposta

17

Questo non tiene conto della premessa della domanda, ma vorrei davvero consiglia di utilizzare backslash in questo caso:

with really_really_long_name_function(p) as f1, \ 
     other_really_really_long_name_function() as f2: 
    pass 

Come @JonClements detto, non è possibile utilizzare le parentesi o virgole in questo caso, non c'è alcuna alternativa in modo backslash sono la strada da percorrere e il codice sembra abbastanza pulito IMO.

+0

Sembra che tu abbia dimenticato le parentesi alla fine della funzione 'other_really_really_long_name'. –

+3

Sì - Dal momento che le parentesi non possono essere utilizzate (non riesco a pensare a un motivo adeguatamente giustificabile perché però) allora sì, penso che il backslashing sia facilmente il più leggibile e pratico in questo caso .... –

+0

@segfolt corretto. – jamylak

11

Se si vuole evitare di backslash, è possibile alias i nomi lunghi:

lnf = long_name_function 
olnf = other_long_name_function 
with lnf(p) as a, olnf(): 
    # ... 

o si potrebbe annidare le dichiarazioni:

with long_name_function(p) as a: 
    with other_long_name_function(): 
     pass 

Non non desidera utilizzare contextlib.nested(); ci sono diversi problemi che ha portato direttamente alla sua deprecazione. Ad esempio, i gestori di contesto precedenti non sono coperti per problemi con i gestori di contesto successivi nel raggruppamento.

+2

Le parentesi troppo brutte non funzionano bene qui. –

+0

@JaredGoguen: puoi mettere l'espressione che crea o nomina il gestore del contesto tra parentesi, ma diventa davvero brutto. –

Problemi correlati