Pregunta ¿Hay un formato recomendado para las importaciones de líneas múltiples?


He leído que hay tres formas de codificar importaciones multilínea en python

Con barras diagonales:

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

Duplicar las oraciones:

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

Con paréntesis:

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

¿Hay un formato recomendado o una forma más elegante para estas declaraciones?


74
2018-01-17 10:24


origen


Respuestas:


Personalmente, voy con paréntesis cuando importo más de un componente y los clasifico alfabéticamente. Al igual que:

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

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 vaya con lo que le parezca mejor.


98
2018-01-17 10:45



Sus ejemplos parecen provenir de PEP 328. Allí, la anotación de paréntesis se propone exactamente para este problema, así que probablemente yo elegiría esta.


12
2018-01-17 10:35



Me gustaría ir con la notación de paréntesis de la PEP328 con nuevas líneas agregadas antes y después de paréntesis:

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

Este es el formato que Django usos:

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,
)

1
2018-02-19 14:20



Usualmente con Tkinter, está bien simplemente usar from Tkinter import * ya que el módulo solo exportará nombres que sean claramente widgets.

PEP 8 no enumera ninguna convención 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 sea que indique que está importando cosas de un solo módulo.

Como todos esos nombres están disponibles en su alcance, personalmente creo que las opciones 2 son las más claras ya que puede ver mejor los nombres importados. Incluso podrías dividirlo más para quizás agrupar esos nombres juntos que pertenecen el uno con el otro. En tu ejemplo, podría poner Tk, Frame y Canvas por separado, ya que agrupan widgets juntos, teniendo Button y Text por separado, ya que son componentes más pequeños en una vista.


-2
2018-01-17 10:34