2013-06-24 10 views
18

ja rzadko trzeba napisać coś podobnegoDługie import w Pythonie

from blqblq.lqlqlqlq.bla import fobarbazbarbarbazar as foo 
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 

która zajmuje więcej niż 80 znaków. Ta sytuacja nie jest objęta official Python coding style guide. Jak mogę pisać taki import pythonically?

Odpowiedz

21

http://www.python.org/dev/peps/pep-0008/#maximum-line-length

Korzystnym sposobem pakowania długich linii jest Pythonie wynikało kontynuacji linii wewnątrz okrągłe, kwadratowe i stężeń. Długie linie mogą być przerywane na wiele linii poprzez zawijanie wyrażeń w nawiasach. Powinny być one używane zamiast używania odwrotnego ukośnika do kontynuacji linii. Upewnij się, aby odpowiednio dopasować ciągłą linię . Preferowanym miejscem do złamania binarnego operatora jest po operatora, a nie przed nim.

Więc w twoim przypadku może to być:

from blqblq.lqlqlqlq.bla import (
           fobarbazbarbarbazar 
           as foo) 
from matplotlib.backends.backend_qt4agg import (
               FigureCanvasQTAgg 
               as FigureCanvas) 

Osobiście zawsze wykorzystywać ten styl, który uważam za bardziej czytelny z długich linii:

# Just 1 indent 
from blqblq.lqlqlqlq.bla import (
    fobarbazbarbarbazar 
    as foo 
) # end at the next line so it's always clear where what ends 

from matplotlib.backends.backend_qt4agg import (
    FigureCanvasQTAgg as FigureCanvas 
) 
+0

Twój drugi przykład narusza zasadę, że nowa linia powinna zaczynać się od nawiasów otwierających. Czy jest to akceptowalny kompromis i jak zdecydujesz, gdzie kontynuować linię. – Vorac

+0

To był błąd podczas wcięcia z mojej strony faktycznie, oficjalnie powinieneś być w stanie to zrobić bez (chyba że masz słowa, które są dłuższe niż 80 znaków, ale w tym przypadku prawdopodobnie robisz coś źle w każdym razie). – Wolph

5

To jest PEP8documentation dla długiimport:

Obecnie, jeśli chcesz zaimportować wiele nazwisk z modułem lub pakietu, trzeba wybrać jedną z kilku niesmaczny opcji:

Napisz długą linię kontynuacje backslash:

from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \ 
    LEFT, DISABLED, NORMAL, RIDGE, END 

Write Multiple instrukcje importu:

from Tkinter import Tk, Frame, Button, Entry, Canvas, Text 
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END 

(import * nie wchodzi w grę ;-)

Zamiast tego powinno być możliwe użycie standardowego mechanizmu grupowania Pythona (nawiasów) napisać oświadczenie import:

from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text, 
    LEFT, DISABLED, NORMAL, RIDGE, END) 

Ta część wniosku uzyskała akceptację BDFL od początku.

Obsługa nawiasów została dodana do Pythona 2.4.