Python/Conceitos básicos/Módulos

Cada arquivo em Python é chamado de módulo. Módulos são um conjunto de códigos como funções, classes, variáveis, etc. Vários módulos podem se comunicar através do comando import módulo.

Importando módulosEditar

Existem dois modos principais de chamar módulos[1], como:

>>>import wx
>>>print wx.codificação()
utf-8

ou

>>>from wx import *
>>>print codificação()
utf-8

Nos dois modos, é lido o arquivo wx.py.

Os dois modos de acesso estão corretos e não geraram erros, o funcionamento seria: procura o módulo e inicializá-o e o outro define o escopo do módulo.

No primeiro modo (import modulo) existe um alto acoplamento devido ao modo de acesso ao módulo wx onde é efetuada as duas etapas para cada módulo. As funções (e variáveis) do módulo wx tornam-se disponíveis precedendo seu nome por wx., por exemplo, se em wx.py é definida uma variável A, então esta variável pode ser usada como wx.A.

No segundo exemplo (from modulo import *) se ganharia flexibilidade de definir e reimportar todas as funções do módulo wx, incluindo a função codificação(). As funções e variáveis do módulo tornam-se acessíveis sem precisar prepor o wx..

Qual é o melhor método?Editar

Um dos principios da linguagem é que There should be one-- and preferably only one --obvious way to do it[2] (numa tradução livre Deve haver um - e apenas um - modo óbvio de fazer isso), e a importação de módulos não é exceção.

Como regra geral, deve-se usar import modulo[1]. A principal exceção (há outras, ver a referência [1]) é quando a própria documentação do módulo recomenda que se use from modulo import * (por exemplo, o tkinter)

Módulos disponíveisEditar

Os módulos disponíveis estão armazenados na variável sys.modules, para ver quais são é preciso importar o módulo sys:

>>> import sys
>>> sys.modules

Ver também Python/Bibliotecas padrão.

ReferênciasEditar

  1. 1,0 1,1 1,2 Importing Python Modules, por Fredrik Lundh, no site effbot.org. Explica as diferenças entre import módulo e from módulo import *, além de um terceiro método não descrito neste tutorial
  2. The Zen of Python, site python.org