Diferença de impor para from import

96 views
Skip to first unread message

Devel Silva

unread,
Jan 26, 2016, 5:43:10 PM1/26/16
to Python Brasil
Qual a diferença de:

>>> from anymodule import *



Para:

>>> import anymodule

?

Mário Idival

unread,
Jan 26, 2016, 5:46:02 PM1/26/16
to python...@googlegroups.com
from anymodule import *

tudo que tiver dentro de anymodule vai está disponivel para o uso diretamente.

import anymodule

tudo que tiver dentro de anymodule vai está disponivel para o uso atravez de anymodule.O_QUE_VC_QR_USAR...
Salvo algumas funcoes/variaveis/constantes/classes iniciadas com _, 



Mário Idival
Python Developer

Twitter|Github|Skype : marioidival
Facebookmario.idival
User Linux : #554446

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Fabio C. Barrionuevo da Luz

unread,
Jan 26, 2016, 5:48:42 PM1/26/16
to python...@googlegroups.com
evite com toda a força fazer:

from anymodule import *

use

from anymodule import variavel1, funcao1, classe1


--
Fábio C. Barrionuevo da Luz
Palmas - Tocantins - Brasil - América do Sul


Blog colaborativo sobre Python e tecnologias Relacionadas, mantido totalmente no https://github.com/pythonclub/pythonclub.github.io .

Todos são livres para publicar. É só fazer fork, escrever sua postagem e mandar o pull-request. Leia mais sobre como publicar em README.md e contributing.md.
Regra básica de postagem:
"Você" acha interessante? É útil para "você"? Pode ser utilizado com Python ou é útil para quem usa Python? Está esperando o que? Publica logo, que estou louco para ler...

Junior Phanter

unread,
Jan 27, 2016, 5:07:43 AM1/27/16
to python...@googlegroups.com
Independente das vantagens e desvantagens de usar um ou outro, basicamente a diferença é a forma como eles estarão disponíveis em seu projeto.
Por exemplo, vamos supor que dentro de anymodule tem uma função chamada anyfuntion, ao usar import anymodule, a função poderá se chamada com anymodule.anyfuncion(), já importanto com from anymodule import * (ou from anymodule import anyfunction), a função poderá ser chamada diretamente como é chamada, ou seja, anyfunction().
Como dito pelo nosso amigo Fabio, deve-se evitar utilizar o *, acredito que uma das razões disso, me corrijam se eu estiver errado, é que pode haver alguma função ou classe dentro do módulo anymodule que possa conflitar com alguma função de seu projeto.

Renzo Nuccitelli

unread,
Jan 27, 2016, 5:42:42 AM1/27/16
to python...@googlegroups.com
Junior,

Essa é a razão. E mesmo que não haja conflito agora, pode ocorrer no futuro. Alguém faz update no módulo acrescentando elementos. Seria um bug chato de pegar.
Renzo Nuccitelli

Eu leio email somente uma vez por dia. Se o assunto for urgente, me ligue.


Matheus Pereira

unread,
Jan 27, 2016, 7:51:09 AM1/27/16
to Python Brasil
Complementando a resposta do Junior, essa prática também vai de encontro ao segundo princípio do Zen do Python: "Explícito é melhor que implícito."
Vai ter um monte de nomes que você provavelmente não sabe que estão disponíveis no teu código e, pior que isso, não está explícito de onde vem as coisas que você está usando, por exemplo:

from anymodule1 import *
from anymodule2 import *
lanch_type = anymethod(12)

anymethod vem de anymodule1, anymodule2, do teu código ou não foi declarada?

o pyflakes também vai reclamar:
'from anymodule1 import *' used; unable to detect undefined names

Essa prática reduz bastante a qualidade do código e dificulta sua manutenção.
Reply all
Reply to author
Forward
0 new messages