Criar módulos importáveis

Concluído

Tip

Consulte a guia Texto e imagens para obter mais detalhes!

Quando o teu programa tem mais do que um punhado de funções, manter tudo num único ficheiro torna-se difícil de navegar. Python resolve isto com módulos. Um módulo é apenas um .py ficheiro cujas funções e variáveis podem ser reutilizadas a partir de outros ficheiros.

Criar o teu próprio módulo

Qualquer ficheiro Python que escrevas pode ser importado como um módulo. O nome do módulo é o nome do ficheiro sem a .py extensão.

Suponha que tem este ficheiro, math_utils.py:

# math_utils.py

def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

Importação de um módulo

Noutro ficheiro na mesma pasta, pode importar math_utils e utilizar as suas funções:

# app.py
import math_utils

print(math_utils.add(2, 3))        # Output: 5
print(math_utils.multiply(4, 5))   # Output: 20

Importação de nomes específicos

Se só precisares de algumas coisas de um módulo, podes importá-las pelo nome. Esta sintaxe permite-lhe usá-los sem o prefixo do módulo:

from math_utils import add, multiply

print(add(2, 3))        # Output: 5
print(multiply(4, 5))   # Output: 20

Usar um pseudónimo

Se o nome de um módulo for longo ou conflitar com outro, pode dar-lhe um alias mais curto com as:

import math_utils as mu

print(mu.add(2, 3))   # Output: 5

Verá este padrão frequentemente com bibliotecas de terceiros — por exemplo, import pandas as pd.

O bloco if __name__ == "__main__":

Quando fazes import um ficheiro, o Python executa o código nele. Se quiseres incluir código que só deve correr quando o ficheiro é executado diretamente, coloca-o num if __name__ == "__main__": bloco:

# math_utils.py

def add(a, b):
    return a + b

if __name__ == "__main__":
    # Quick self-test — only runs when this file is executed directly
    print(add(2, 3))

Este padrão permite que um ficheiro funcione tanto como um script autónomo como um módulo importável.

Por que os módulos são importantes

  • Mantêm cada ficheiro focado numa única responsabilidade.
  • Tornam o código mais fácil de testar, já que as funções vivem num só lugar.
  • Eles tornam natural partilhar e reutilizar código entre projetos.