2014-06-17 4 views
6

Quando sono la programmazione in Python e ho bisogno di importare più moduli, faccio di solito mi piace questo:C'è qualcosa di negativo nell'avere più importazioni su una riga?

import random, time, matplotlib, cheese, doge 

Poi, quando ho letto sopra il codice di altre persone, questo è quello che vedo:

import random 
import time 
import matplotlib 
import cheese 
import doge 

Perché è questo? C'è qualche differenza tra i due stili?

+0

Ho risposto con molti vantaggi di una importazione per riga, la maggior parte dei quali sta risolvendo un problema nel mantenimento del codice con più importazioni per riga, in particolare in una base di codice Python di grandi dimensioni. – pcurry

risposta

9

Secondo PEP-8 (La Guida allo stile per il codice Python)

Imports should usually be on separate lines, for e.g 

Yes: import os 
    import sys 

No: import sys, os 

It's okay to say this though: 

from subprocess import Popen, PIPE 

per rispondere alla tua domanda - sia avrebbe funzionato bene, ma uno non è conforme con le linee guida PEP8.

+0

Di solito preferisco tenere tutte le mie importazioni su una riga, a meno che il conteggio dei caratteri non superi 80, solo per mantenere il mio codice più breve. Nel caso avessi 50 importazioni per qualche motivo. –

+0

Corretto - Vedo che alcuni programmatori lo fanno. Le linee guida sono un modo per portare coerenza per gli sviluppatori. Sono più di convenzioni - di "errori" per così dire. Nella mia esperienza/opinione, è una buona idea seguire le linee guida. – karthikr

+0

E il codice breve è migliore perché ...? – holdenweb

1

Questi due esempi sono funzionalmente equivalenti. Tuttavia, PEP 8, lo stile-guida ufficiale per Python, ha una sezione here che condanna la pratica di collocare più importazioni su una riga:

 
Imports should usually be on separate lines, e.g.: 

    Yes: import os 
     import sys 

    No: import sys, os 

It's okay to say this though: 

    from subprocess import Popen, PIPE 

Così, molti programmatori Python piazzare una sola importazione per linea al fine di seguire questa linea guida

1

PEP-8, la guida in stile Python ufficiale, impone l'importazione di un pacchetto o modulo per riga.

È considerato di buona qualità e generalmente la standardizzazione facilita la lettura dei programmi. Non penso che ci siano delle differenze sostanziali sotto cui preoccuparsi, se è questo che stai chiedendo.

8

La pratica di un'importazione per riga è standardizzata in PEP8 e seguire uno standard comune è una ragione sufficiente per fare come altri. Seguendo uno standard comune segue lo Principle of Least Astonishment, rendendo più facile per le persone che hanno familiarità con lo standard leggere e modificare il codice.

Anche se non ti interessa il PEP8, tuttavia, un'importazione per riga rende il codice più gestibile.

  • Le importazioni sono più facili da scremare/lettura:

    • E 'più facile vedere che si stanno ottenendo un fred in import fred che in import barney, betty, wilma, fred, bambam, pebbles
  • Le importazioni sono più facili da individuare:

    • Ricerca di "import fred" troverà import fred e import fred, wilma, pebbles, ma non troverà import barney, fred
  • Le importazioni sono più facili da modificare:

    • Inserimento e rimozione di una intera linea è veloce nella maggior parte degli editori.
    • C'è solo un modulo per riga, quindi non devi cercare nella riga per trovare la cosa che desideri modificare - è alla fine.
    • Spostare un'importazione all'interno di un modulo significa semplicemente spostare un'intera linea.
    • La copia di una delle varie importazioni in un altro modulo Python è una copia-incolla di una riga, anziché quella copia-incolla seguita dal ritaglio delle altre importazioni che non si desidera.
  • Le importazioni sono più facili da mantenere:

    • Ogni modulo mutata ha una propria linea nel cambiamento-set - non si dispone di leggere una riga per capire quale modulo o moduli cambiato.
    • I moduli mancanti e aggiunti effettuano il conteggio delle righe sul file e nel set di modifiche.
    • I caratteri sono più facili da individuare e correggere sullo skim visivo del set di modifiche.

Uno importazione per linea sarebbe una buona idea, anche se non fosse lo standard. Dal momento che è lo standard, è doppiamente il modo migliore per andare.

+0

Amo l'intuizione piuttosto che il semplice riferimento a PEP8! –

1

Non mi piace seguire ciecamente senza una valida ragione. Come PEP20: Zen di Python afferma che "Conti di leggibilità"

PEP8 "linea singola per l'importazione" lavora per prospettiva generale. Sebbene io rispetti la sua opinione (vale a dire Guido), non seguirò sempre rigorosamente queste convenzioni tutte le volte.

L'eccezione per questa regola è solo quando il numero di codice è minore del numero di unità di importazione. per esempio. 2 righe di codice, ma 4 moduli di importazione.

questo è più leggibile: (a mio parere)

import os, sys, math, time 

def add_special(): 
    return time.time() + math.floor(math.pow(sys.api_version + os.getpid(), 2)) 

invece di questo

import os 
import sys 
import math 
import time 

def add_special(): 
    return time.time() + math.floor(math.pow(sys.api_version + os.getpid(), 2)) 

Ma questa materia leggibilità è diverso per ogni individui.