Diferenças no import em Python

Quero explicar algo que gostaria de ter ouvido na resposta do professor ao aluno (feita na história do post anterior), que é a diferença entre:
import módulo
e
from módulo import método/atributo/*

Antes vou tentar exemplificar!
Se fizermos:
import string
a = 'teste'
upper(a)

irá nos retornar um erro informando que o método upper() não existe, para que isso funcione devemos fazer:

string.upper(a)

ou seja,

módulo.método

Para que o primeiro código funcione, substituímos import string por from string import upper ou from string import *

Explicando teoricamente, ao fazer from módulo import método/atributo/*, os atributos e métodos dos tipos de módulos importados são importados diretamente para dentro do namespace local, ficando disponíveis diretamente, sem qualificação por nome do módulo. Enquanto da outra forma é necessário qualificar o módulo antes do método/atributo a ser utilizado.

2 comentários até agora

  1. Rodrigo Hübner on

    Complementando um pouco essa idéia do “import”…
    os métodos embutidos da biblioteca padrão do python são muito rícos. As vezes queremos “matar uma pomba com um canhão”, então para tornar uma simples string em caixa alta fazemos:

    >>> import string
    >>> a = “isso eh um teste”
    >>> print string.upper(a)
    ISSO EH UM TESTE

    ou

    >>> from string import *
    >>> a = “isso eh um teste”
    >>> print upper(a)
    ISSO EH UM TESTE

    …que irá carregar ainda mais nosso namespace com TODOS os métodos da classe string.

    Na verdade podemos fazer apenas assim:

    >>> print “isso eh um teste”.upper()
    ISSO EH UM TESTE

    Para listar os métodos embutidos de uma string fazemos:

    >>> dir(a)
    ou
    >>> dir(str)

    E isso vale para todos os tipos tanto simples (int, str, float), quanto os mais complexos (list, tuple).

  2. Vinícius Souza on

    Além do Help:
    >>> help(str)

    Que para ficar perfeito, poderia haver uma tradução p/ o português!


Leave a reply