Sobes.tech
Junior

Qual é a diferença entre importar o módulo foo e importar o elemento bar do módulo foo?

sobes.tech IA

Resposta da IA

A importação do módulo foo carrega todo o módulo para o espaço de nomes atual. Para aceder aos elementos do módulo (funções, classes, etc.), é necessário usar foo.element.

A importação do elemento bar do módulo foo (from foo import bar) carrega apenas o elemento especificado bar para o espaço de nomes atual. Depois, o acesso a bar é feito diretamente, sem o prefixo foo..

Característica Importação do módulo (import foo) Importação do elemento (from foo import bar)
Espaço de nomes O módulo está disponível como o objeto foo O elemento especificado está disponível diretamente como bar
Volume de importação Todo o módulo é importado Apenas o elemento especificado é importado
Acesso aos elementos Através do prefixo foo. Diretamente pelo nome do elemento
Conflitos possíveis Menos provável de conflitos de nomes dentro do módulo Alta probabilidade de conflitos de nomes ao importar vários elementos com os mesmos nomes de diferentes módulos

Exemplo:

# import foo
# Acesso à função baz do módulo foo
# foo.baz()

# from foo import baz
# Acesso à função baz do módulo foo
# baz()

A escolha entre as opções depende de quão frequentemente os elementos do módulo serão usados e do risco de conflito de nomes. Para elementos usados com frequência e em pequenas quantidades, é preferível from ... import .... Para uso ocasional ou com risco de conflito de nomes, é melhor usar import ....