Я читал, что есть три способа кодирования многострочного импорта в python
С косой чертой:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
LEFT, DISABLED, NORMAL, RIDGE, END
Дублирование предложений:
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)
Есть ли рекомендуемый формат или более элегантный способ для этого утверждения?
python
python-2.7
pep8
Мануэль Альварес
источник
источник
from Tkinter import *
?from data.forms import AddressEmbeddedField, PhoneEmbeddedField, MailEmbeddedField, \ WebEmbeddedField
но не хочу импортировать все остальные встроенные поля в data.formsfrom Tkinter import *
? Я не. И IDE не будут знать, есть ли эти имена (возможно), поэтому они не смогут определить, ввели ли вы недопустимое имя.Ответы:
Лично я использую круглые скобки при импорте более одного компонента и сортирую их по алфавиту. Вот так:
Это дает дополнительное преимущество в том, что легко видеть, какие компоненты были добавлены / удалены в каждой фиксации или PR.
В целом, это личное предпочтение, и я бы посоветовал вам выбрать то, что вам больше нравится.
источник
Ваши примеры, похоже, происходят из PEP 328 . Здесь круглые скобки предложены именно для этой задачи, так что, наверное, я бы выбрал именно эту.
источник
Я бы выбрал обозначение скобок из PEP328 с добавлением новой строки до и после скобок:
Это формат, который использует Django :
источник
from foo import (bar, baz)
. PEP 328 ничего не говорит о форматировании.Обычно с Tkinter можно просто использовать,
from Tkinter import *
поскольку модуль будет экспортировать только имена, которые явно являются виджетами.PEP 8 не содержит никаких соглашений для такого случая, поэтому я думаю, что вам решать, какой вариант лучше. Все дело в удобочитаемости, поэтому выбирайте то, что дает понять, что вы импортируете данные из одного модуля.
Поскольку все эти имена доступны в вашей области, я лично считаю, что вариант 2 является наиболее ясным, поскольку вы можете лучше всего видеть импортированные имена. Затем вы можете даже разделить его, чтобы, возможно, сгруппировать те имена, которые принадлежат друг другу. В вашем примере я мог бы указать
Tk
,Frame
иCanvas
отдельно, поскольку они группируют виджеты вместе, имеяButton
иText
отдельно, поскольку они являются более мелкими компонентами в представлении.источник
from X import *
даже для пакетов, которые используются__all__
правильно, заключается в том, что статические анализаторы кода, например,pyflakes
не могут обнаруживать неопределенные имена, если они есть,import *
поскольку они должны предполагать, что любые неопределенные имена могут быть импортированы пакетом*
.