Eu li que existem três maneiras de codificar importações de várias linhas em python
Com barras:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
LEFT, DISABLED, NORMAL, RIDGE, END
Duplicando senteces:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END
Com parênteses:
from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
LEFT, DISABLED, NORMAL, RIDGE, END)
Existe um formato recomendado ou uma forma mais elegante para essas declarações?
python
python-2.7
pep8
Manuel Alvarez
fonte
fonte
from Tkinter import *
?from data.forms import AddressEmbeddedField, PhoneEmbeddedField, MailEmbeddedField, \ WebEmbeddedField
mas não quero importar todo o resto dos campos incorporados em data.formsfrom Tkinter import *
? Eu não estou. E os IDEs não saberão se esses nomes (talvez), portanto, eles não são capazes de dizer se você inseriu um nome inválido.Respostas:
Pessoalmente, eu uso parênteses ao importar mais de um componente e os classifico em ordem alfabética. Igual a:
Isso tem a vantagem adicional de ver facilmente quais componentes foram adicionados / removidos em cada commit ou PR.
No geral, porém, é uma preferência pessoal e eu o aconselho a ir com o que parecer melhor para você.
fonte
Seus exemplos parecem originar-se do PEP 328 . Lá, a notação de parênteses é proposta exatamente para esse problema, então provavelmente eu escolheria este.
fonte
Eu iria com a notação de parênteses do PEP328 com novas linhas adicionadas antes e depois dos parênteses:
Este é o formato que o Django usa:
fonte
from foo import (bar, baz)
. PEP 328 não diz nada sobre formatação.Normalmente com o Tkinter, não há problema em apenas usar,
from Tkinter import *
pois o módulo exportará apenas nomes que sejam claramente widgets.O PEP 8 não lista nenhuma convenção para esse caso, então acho que cabe a você decidir qual é a melhor opção. É tudo uma questão de legibilidade, então escolha o que deixar claro que você está importando coisas de um único módulo.
Como todos esses nomes estão disponíveis em seu escopo, eu pessoalmente acho que a opção 2 é a mais clara, pois você pode ver os nomes importados da melhor forma. Você pode até mesmo dividir mais para talvez agrupar os nomes que pertencem uns aos outros. Em seu exemplo, eu poderia colocar
Tk
,Frame
eCanvas
separadamente, pois eles agrupam widgets juntos, embora tenhamButton
eText
separadamente, pois são componentes menores em uma visualização.fonte
from X import *
até mesmo para pacotes que usam__all__
corretamente é que os analisadores de código estático comopyflakes
não podem detectar nomes indefinidos se houver algum,import *
uma vez que tem que assumir que quaisquer nomes indefinidos foram importados pelo*
.