He leído que hay tres formas de codificar importaciones de varias líneas en Python
Con barras:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
LEFT, DISABLED, NORMAL, RIDGE, END
Duplicación de sentencias:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END
Entre paréntesis:
from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
LEFT, DISABLED, NORMAL, RIDGE, END)
¿Existe un formato recomendado o una forma más elegante para estas declaraciones?
python
python-2.7
pep8
Manuel Alvarez
fuente
fuente
from Tkinter import *
?from data.forms import AddressEmbeddedField, PhoneEmbeddedField, MailEmbeddedField, \ WebEmbeddedField
pero no quiero importar todo el resto de campos incrustados en data.formsfrom Tkinter import *
? No soy. Y los IDE no sabrán si estos nombres (tal vez), por lo que no pueden saber si ingresó un nombre no válido.Respuestas:
Personalmente, voy entre paréntesis al importar más de un componente y los ordeno alfabéticamente. Al igual que:
Esto tiene la ventaja adicional de ver fácilmente qué componentes se han agregado / eliminado en cada confirmación o PR.
En general, es una preferencia personal y le aconsejo que elija lo que le parezca mejor.
fuente
Sus ejemplos parecen provenir de PEP 328 . Allí, se propone la notación entre paréntesis exactamente para este problema, por lo que probablemente elegiría este.
fuente
Iría con la notación de paréntesis del PEP328 con nuevas líneas agregadas antes y después de los paréntesis:
Este es el formato que usa Django :
fuente
from foo import (bar, baz)
. PEP 328 no dice nada sobre el formateo.Por lo general, con Tkinter, está bien usarlo,
from Tkinter import *
ya que el módulo solo exportará nombres que sean claramente widgets.PEP 8 no enumera convenciones para tal caso, así que supongo que depende de usted decidir cuál es la mejor opción. Todo se trata de legibilidad, así que elija lo que le indique claramente que está importando cosas de un solo módulo.
Como todos esos nombres están disponibles en su alcance, personalmente creo que la opción 2 es la más clara, ya que puede ver mejor los nombres importados. Luego, incluso podría dividirlo más para quizás agrupar esos nombres que pertenecen entre sí. En su ejemplo, podría poner
Tk
,Frame
y porCanvas
separado, ya que agrupan los widgets, mientras que tienenButton
y porText
separado, ya que son componentes más pequeños en una vista.fuente
from X import *
incluso para los paquetes que se usan__all__
correctamente es que los analizadores de código estático comopyflakes
no pueden detectar nombres indefinidos, si los hay,import *
ya que se asume que los nombres indefinidos tal vez fueron importados por*
.