Существует ли рекомендуемый формат для многострочного импорта?


Я прочитал, что есть три способа кодирования многострочного импорта в python

с косой чертой:

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

дублировать senteces:

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

С скобки:

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

есть ли рекомендуемый формат или более элегантный способ для этого заявления?

4 78

4 ответа:

лично я иду с круглыми скобками при импорте более одного компонента и сортирую их в алфавитном порядке. Вот так:

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

это имеет дополнительное преимущество легко видеть, какие компоненты были добавлены / удалены в каждой фиксации или PR.

в целом, хотя это личное предпочтение, и я бы посоветовал вам пойти с тем, что выглядит лучше для вас.

ваши примеры, кажется, вытекают из PEP 328. Там скобки-обозначения предлагаются именно для этой проблемы, поэтому, вероятно, я бы выбрал этот.

Я бы пошел с обозначением скобок из PEP328 С добавлением новых строк до и после скобок:

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

Это формат, который Джанго применение:

from django.test.client import Client, RequestFactory
from django.test.testcases import (
    LiveServerTestCase, SimpleTestCase, TestCase, TransactionTestCase,
    skipIfDBFeature, skipUnlessAnyDBFeature, skipUnlessDBFeature,
)
from django.test.utils import (
    ignore_warnings, modify_settings, override_settings,
    override_system_checks, tag,
)

обычно с Tkinter, это нормально просто использовать from Tkinter import * как модуль будет экспортировать только имена, которые явно виджеты.

PEP 8 не перечисляет никаких конвенций для такого случая, поэтому я думаю, что это до вас, чтобы решить, что является лучшим вариантом. Все дело в удобочитаемости, поэтому выбирайте то, что дает понять, что вы импортируете материал из одного модуля.

поскольку все эти имена доступны в вашей области, я лично думаю, что варианты 2 самые четкие, как вы можете видеть импортированные имена лучше всего. Затем вы можете даже разделить его больше, чтобы, возможно, сгруппировать эти имена вместе, которые принадлежат друг другу. В вашем примере я мог бы поставить Tk,Frame и Canvas отдельно, как они группируют виджеты вместе, имея Button и Text отдельно, поскольку они являются меньшими компонентами в представлении.