2014-06-17 4 views
6

Wenn ich Programmierung in Python, und ich brauche mehrere Module zu importieren, Ich Ich mag dies in der Regel tun:Gibt es etwas Schlechtes, mehrere Importe auf einer Linie zu haben?

import random, time, matplotlib, cheese, doge 

Dann, wenn ich über andere Leute Code zu lesen, ist es das, was ich sehe:

import random 
import time 
import matplotlib 
import cheese 
import doge 

Warum ist das? Gibt es einen Unterschied zwischen den beiden Stilen?

+0

Ich antwortete mit vielen Vorteilen von einem Import pro Zeile - die meisten lösen ein Problem bei der Code-Verwaltung mit mehreren Importen pro Zeile, besonders in einer großen Python-Codebasis. – pcurry

Antwort

9

Per PEP-8 (The Style Guide für Python-Code)

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 

Um Ihre Frage zu beantworten - beide gut funktionieren würde, aber man ist nicht konform mit den Richtlinien PEP8.

+0

Normalerweise ziehe ich es vor, alle meine Importe in einer Zeile zu behalten, es sei denn, die Zeilenanzahl übersteigt 80, nur um meinen Code kürzer zu halten. Nur für den Fall, dass ich aus irgendeinem Grund 50 Importe habe. –

+0

Richtig - Ich sehe einige Programmierer, die das tun. Die Richtlinien sind eine Möglichkeit, die Konsistenz für Entwickler zu verbessern. Sie sind mehr von Konventionen - als sozusagen "Fehler". Nach meiner Erfahrung/Meinung ist es eine gute Idee, den Richtlinien zu folgen. – karthikr

+0

Und kurzer Code ist besser weil ...? – holdenweb

1

Diese beiden Beispiele sind funktionell gleichwertig. Allerdings PEP 8, die offizielle Stil-Leitfaden für Python, hat einen Abschnitt here, dass die Praxis des Vergebens mehrere Importe auf einer Linie verurteilt:

 
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 

So setzen viele Python-Programmierer nur ein Import pro Zeile, um Folge dieser Richtlinie.

1

PEP-8, der offizielle Python-Style-Guide, schreibt vor, dass ein Paket oder Modul pro Zeile importiert werden soll.

Es gilt als guter Stil, und im Allgemeinen macht die Standardisierung Programme leicht lesbar. Ich glaube nicht, dass es unter der Haube erhebliche Unterschiede gibt, um die man sich sorgen muss, wenn man das verlangt.

8

Die Praxis von einem Import pro Zeile ist in PEP8 standardisiert, und nach einem gemeinsamen Standard ist Grund genug zu tun, wie andere tun. Nach einem gemeinsamen Standard folgt die Principle of Least Astonishment, die es für Personen, die mit dem Standard vertraut sind, einfacher macht, Ihren Code zu lesen und zu ändern.

Auch wenn Sie sich nicht für PEP8 interessieren, macht ein Import pro Zeile Ihren Code wartungsfreundlicher.

  • Importe sind leichter zu überfliegen/lesen:

    • Es ist einfacher zu sehen, dass Sie eine fred in import fred als bekommen in import barney, betty, wilma, fred, bambam, pebbles
  • Importe sind leichter zu lokalisieren:

    • Suche nach "import fred" finden import fred und import fred, wilma, pebbles, aber finden nicht import barney, fred
  • Importe sind leichter zu bearbeiten:

    • einsetzen und eine ganze Zeile zu entfernen, ist schnell in den meisten Editoren.
    • Es gibt nur ein Modul pro Zeile, so dass Sie nicht in der Zeile suchen müssen, um das zu finden, was Sie bearbeiten möchten - es ist am Ende.
    • Das Verschieben eines Imports innerhalb eines Moduls verschiebt nur eine ganze Zeile.
    • Das Kopieren eines von mehreren Importen in ein anderes Python-Modul ist ein Kopieren-Einfügen einer Zeile, , anstatt das Kopieren-Einfügen, gefolgt von dem Abschneiden der anderen Importe, die Sie nicht möchten.
  • Importe sind leichter zu pflegen:

    • Jedes geänderte Modul hat seine eigene Linie im Wechselsatz - Sie müssen nicht eine Zeile, um herauszufinden, welches Modul oder Module lesen müssen geändert.
    • Fehlende und hinzugefügte Module wirken sich auf die Zeilenanzahl in der Datei und im Change-Set aus.
    • Tippfehler sind leichter zu erkennen und korrigieren Sie die visuellen Änderungen der Änderungsmenge.

Ein Import pro Zeile wäre eine gute Idee sein, auch wenn es nicht die Norm war. Da es der Standard ist, ist es doppelt der beste Weg zu gehen.

+0

Ich liebe die Intuition und nicht nur den Bezug auf PEP8! –

1

Ich mag es nicht blind ohne gültigen Grund folgen. Wie PEP20: Zen of Python besagt, dass "Ablesbarkeit Counts"

PEP8 "einzelne Zeile pro Import" für die allgemeine Perspektive funktioniert. Obwohl ich seine (d. H. Guido) Meinung respektiere, würde ich diese Konventionen nicht immer strikt befolgen.

Die Ausnahme für diese Regel tritt nur auf, wenn die Codezahl kleiner als die Anzahl der Modulimporte ist. z.B. 2 Zeilen Code, aber 4 Module importieren.

Dies ist besser lesbar: (meiner Meinung nach)

import os, sys, math, time 

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

anstelle dieses

import os 
import sys 
import math 
import time 

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

Aber diese Lesbarkeit Materie unterscheidet sich für jeden Einzelnen.

Verwandte Themen